2017-02-28 8 views
0
でJava DSLでRequestConfigを使用してソケットタイムアウトを追加

だから、私は基本的にこの方法を使用してthis-http4クライアントキャメル

from("direct:send_success") 
     .to("http4://localhost:8089/mock/success?httpClient.socketTimeout=1000"); 

のように見えますroute持って、私は1秒のソケットタイムアウトを適用することができますよ成功しました。私はこのルートを呼び出すためにProducerTemplateを使用しています。これは大丈夫です。しかし、私は

from("direct:send_success") 
    .to("http4://localhost:8089/mock/success"); 

ツー・ルートとルートの呼び出し

ProducerTemplate pt = ctx.createProducerTemplate(); 
Exchange ex = pt.send("direct:send_success", exOb -> { 
    HttpComponent httpComp = exOb.getContext().getComponent("http4", HttpComponent.class); 
    exOb.getContext().getComponent("http4", HttpComponent.class).setHttpClientConfigurer(httpClientBuilder -> { 
      HttpClientBuilder 
       .create() 
       .setDefaultRequestConfig(requestConfigWithTimeout(1000)) 
       .build(); 
     }); 
}); 

ツー・タイムアウト設定が適用されていないrequestConfigWithTimeout()

private static RequestConfig requestConfigWithTimeout(int timeoutInMilliseconds) { 
    return RequestConfig.copy(RequestConfig.DEFAULT) 
      .setSocketTimeout(timeoutInMilliseconds) 
      .build(); 
} 

AS-方法を変更したとき。どこが間違っていますか?

答えて

2

の後にhttpコンポーネントを変更することはできません。キャメルルートが作成され、開始されました。その後、ルートは、構成されていないhttp4コンポーネントで作成されましたあなたが行う追加コード

メッセージを送信するときではなく、http4コンポーネントを先に設定します。

+0

リクエストヘッダにcxfの 'ClientPolicy'を使ってSOAPエンドポイントに対しても同じことができましたので、ここでも回避策があると思いました。とにかく、助けてくれてありがとう。 – Abhishek

関連する問題