Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第3章 AHC
Async Http Client (AHC)コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.8 から利用可能
ahc: コンポーネントは、(HTTP を使用して外部サーバーを呼び出すクライアントとして)外部 HTTP リソースを消費する HTTP ベースの エンドポイント を提供します。コンポーネントは Async Http Client ライブラリーを使用します。
Maven ユーザーは、このコンポーネントの
pom.xml
に以下の依存関係を追加する必要があります。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ahc:http://hostname[:port][/resourceUri][?options] ahc:https://hostname[:port][/resourceUri][?options]
ahc:http://hostname[:port][/resourceUri][?options]
ahc:https://hostname[:port][/resourceUri][?options]
デフォルトでは、HTTP にポート 80 を使用し、HTTPS には 443 を使用します。
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
AhcEndpoint オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
throwExceptionOnFailure
|
true
|
リモートサーバーからの応答に失敗した場合に AhcOperationFailedException を出力することを無効にするオプション。これにより、HTTP ステータスコードに関係なくすべての応答を取得できます。
|
bridgeEndpoint
|
false
|
オプションが true の場合、Exchange.HTTP_URI ヘッダーは無視され、リクエストにエンドポイントの URI を使用します。また、throwExcpetionOnFailure を false に設定して、AhcProducer がすべての障害応答を返信するようにすることもできます。 |
transferException
|
false
|
有効であり、エクスチェンジ がコンシューマー側で処理に失敗した場合、発生した 例外 が application/x-java-serialized-object コンテンツタイプとして応答でシリアライズされた場合は( Jetty または Servlet Camel コンポーネントを使用するなど)。プロデューサー側では、例外がデシリアライズされ、AhcOperationFailedException ではなくそのまま出力されます。原因となった例外はシリアライズする必要があります。
|
クライアント
|
null
|
カスタム com.ning.http.client.AsyncHttpClient を使用するには、以下を行います。
|
clientConfig
|
null
|
AsyncHttpClient がカスタム com.ning.http.client.AsyncHttpClientConfig を使用するように設定します。
|
clientConfig.x
|
null
|
エンドポイントによって使用される com.ning.http.client.AsyncHttpClientConfig インスタンスの追加プロパティーを設定します。このパラメーターを使用して設定された設定オプションは、clientConfig パラメーターまたはこのパラメーターを使用して設定されたプロパティーを持つコンポーネントレベルで設定されたインスタンスとマージされます。
|
clientConfig.realm.x
|
null
|
Camel 2.11: com.ning.http.client.AsyncHttpClientConfig のレルムプロパティーを設定するには、com.ning.http.client.Realm.RealmBuilder のオプションを使用できます。たとえば、スキームを設定するには clientConfig.realm.scheme=DIGEST を設定できます。
|
binding
|
null
|
カスタムの org.apache.camel.component.ahc.AhcBinding を使用します。
|
sslContextParameters
|
null
|
Camel 2.9: CAMEL:Registry の org.apache.camel.util.jsse.SSLContextParameters オブジェクトへの参照。この参照は、コンポーネントレベルで設定済みの SSLContextParameters を上書きします。 Security Guide および Using the JSSE Configuration Utility の Configuring Transport Security for Camel Components の章 を参照してください。 このオプションを設定すると、エンドポイントまたはコンポーネントレベルで clientConfig オプションを介して提供される SSL/TLS 設定オプションがすべて上書きされることに注意してください。
|
bufferSize
|
4096
|
Camel 2.10.3: Camel と AHC クライアント間でデータを転送する際に使用される初期インメモリーバッファーサイズ。 |
AhcComponent オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
クライアント
|
null
|
カスタム com.ning.http.client.AsyncHttpClient を使用するには、以下を行います。
|
clientConfig
|
null
|
AsyncHttpClient s を設定するには、カスタムの com.ning.http.client.AsyncHttpClientConfig を使用します。
|
binding
|
null
|
カスタムの org.apache.camel.component.ahc.AhcBinding を使用します。
|
sslContextParameters
|
null
|
Camel 2.9: コンポーネントレベルでカスタム SSL/TLS 設定オプションを設定するには、以下を実行します。 詳細 は、Security Guide の Configuring Transport Security for Camel Components および Using the JSSE Configuration Utility を参照してください。 このオプションを設定すると、エンドポイントまたはコンポーネントレベルで clientConfig オプションを介して提供される SSL/TLS 設定オプションがすべて上書きされることに注意してください。 |
AhcComponent
にオプションのいずれかを設定すると、これらのオプションが作成されている AhcEndpoint
に伝播されることに注意してください。ただし、AhcEndpoint
はカスタムオプションを設定/上書きすることもできます。エンドポイントに設定されたオプションは常に AhcComponent
のオプションよりも優先されます。
メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | タイプ | 説明 |
---|---|---|
Exchange.HTTP_URI
|
文字列
|
呼び出す URI。エンドポイントに設定された既存の URI を直接上書きします。 |
Exchange.HTTP_PATH
|
文字列
|
リクエスト URI のパス。ヘッダーは HTTP_URI でリクエスト URI を構築するために使用されます。パスが "/ で始まる場合、http プロデューサーは Exchange.HTTP_BASE_URI ヘッダーまたは exchange.getFromEndpoint ().getEndpointUri (); に基づいて相対パスの検索を試みます。
|
Exchange.HTTP_QUERY
|
文字列
|
URI パラメーター。エンドポイントで直接設定された既存の URI パラメーターを上書きします。 |
Exchange.HTTP_RESPONSE_CODE
|
int
|
外部サーバーからの HTTP 応答コード。OK の場合は 200 です。 |
Exchange.HTTP_CHARACTER_ENCODING
|
文字列
|
文字エンコーディング。 |
Exchange.CONTENT_TYPE
|
文字列
|
HTTP コンテンツタイプ。は IN メッセージと OUT メッセージの両方で設定され、text/html などのコンテンツタイプを提供します。
|
Exchange.CONTENT_ENCODING
|
文字列
|
HTTP コンテンツエンコーディング。は IN メッセージと OUT メッセージの両方で設定され、gzip などのコンテンツエンコーディングを提供します。
|
メッセージボディー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel は外部サーバーからの HTTP 応答を OUT ボディーに保存します。IN メッセージからのヘッダーはすべて OUT メッセージにコピーされ、ルーティング中にヘッダーが保持されます。さらに、Camel は HTTP 応答ヘッダーと OUT メッセージヘッダーを追加します。
レスポンスコード リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel は HTTP 応答コードに従って処理されます。
- レスポンスコードは 100..299 の範囲にあり、Camel は応答の成功と見なします。
- 応答コードは 300..399 の範囲にあり、Camel はこれをリダイレクト応答として認識し、その情報と共に
AhcOperationFailedException
を出力します。 - 応答コードは 400+ で、Camel はこれを外部サーバー障害とみなし、その情報と共に
AhcOperationFailedException
を出力します。オプションthrowExceptionOnFailure
をfalse
に設定すると、失敗した応答コードに対してAhcOperationFailedException
が出力されないようになります。これにより、リモートサーバーから応答を取得できるようになります。
AhcOperationFailedException リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
この例外には、以下の情報が含まれます。
- HTTP ステータスコード
- HTTP ステータス行 (ステータスコードのテキスト)
- サーバーがリダイレクトを返した場合は、場所をリダイレクトします
- 応答ボディー(
java.lang.String
) (サーバーがボディーを応答として提供)
GET または POST を使用した呼び出し リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下のアルゴリズムは、
GET
または POST
HTTP メソッドのいずれかを使用する必要があるかどうかを判断するために使用されます:1。ヘッダーで提供されるメソッドを使用します。2.クエリー文字列がヘッダーで提供される場合は GET
。3.エンドポイントがクエリー文字列で設定されている場合の GET
。4.送信するデータがある場合は POST
します(null ではありません)。5.それ以外の場合は GET
。
呼び出す URI の設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
HTTP プロデューサーの URI を直接エンドポイント URI として設定できます。以下のルートでは、Camel は HTTP を使用して外部サーバー
oldhost
に呼び出します。
from("direct:start") .to("ahc:http://oldhost");
from("direct:start")
.to("ahc:http://oldhost");
同等の Spring の例:
メッセージのキー
Exchange.HTTP_URI
でヘッダーを追加することで、HTTP エンドポイント URI を上書きできます。
from("direct:start") .setHeader(Exchange.HTTP_URI, constant("http://newhost")) .to("ahc:http://oldhost");
from("direct:start")
.setHeader(Exchange.HTTP_URI, constant("http://newhost"))
.to("ahc:http://oldhost");
URI パラメーターの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ahc プロデューサーは、HTTP サーバーに送信される URI パラメーターをサポートします。URI パラメーターは、エンドポイント URI で直接設定することも、メッセージ上でキー
Exchange.HTTP_QUERY
を持つヘッダーとして設定できます。
from("direct:start") .to("ahc:http://oldhost?order=123&detail=short");
from("direct:start")
.to("ahc:http://oldhost?order=123&detail=short");
または、ヘッダーで提供されるオプション:
from("direct:start") .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short")) .to("ahc:http://oldhost");
from("direct:start")
.setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
.to("ahc:http://oldhost");
http メソッド(GET/POST/PUT/DELETE/HEAD/OPTIONS/TRACE)を HTTP プロデューサーに設定する方法 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
HTTP コンポーネントは、メッセージヘッダーを設定して HTTP リクエストメソッドを設定する方法を提供します。以下に例を示します。
from("direct:start") .setHeader(Exchange.HTTP_METHOD, constant("POST")) .to("ahc:http://www.google.com") .to("mock:results");
from("direct:start")
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.to("ahc:http://www.google.com")
.to("mock:results");
同等の Spring の例:
charset の設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
POST
を使用してデータを送信する場合は、Exchange
プロパティーを使用して charset
を設定できます。
exchange.setProperty(Exchange.CHARSET_NAME, "iso-8859-1");
exchange.setProperty(Exchange.CHARSET_NAME, "iso-8859-1");
エンドポイント URI からの URI パラメーター リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
この例では、完全な URI エンドポイントがあり、これは Web ブラウザーに入力した内容になります。当然ながら、複数の URI パラメーターは、Web ブラウザーと同じように
&
amp; 文字をセパレーターとして使用して設定できます。この場合、Camel は複雑ではありません。
// we query for Camel at the Google page template.sendBody("ahc:http://www.google.com/search?q=Camel", null);
// we query for Camel at the Google page
template.sendBody("ahc:http://www.google.com/search?q=Camel", null);
メッセージの URI パラメーター リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Map headers = new HashMap(); headers.put(Exchange.HTTP_QUERY, "q=Camel&lr=lang_en"); // we query for Camel and English language at Google template.sendBody("ahc:http://www.google.com/search", null, headers);
Map headers = new HashMap();
headers.put(Exchange.HTTP_QUERY, "q=Camel&lr=lang_en");
// we query for Camel and English language at Google
template.sendBody("ahc:http://www.google.com/search", null, headers);
上記のヘッダー値では、先頭に
?
を付け ず、通常 &
amp; 文字でパラメーターを分離することができることに注意してください。
レスポンスコードの取得 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
AHC コンポーネントから HTTP 応答コードを取得するには、
Exchange.HTTP_RESPONSE_CODE
で Out メッセージヘッダーから値を取得します。
AsyncHttpClient の設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
AsyncHttpClient
クライアントは AsyncHttpClientConfig
を使用してクライアントを設定します。詳細は、Async Http Client のドキュメントを参照してください。
以下の例は、ビルダーを使用して
AhcComponent
で設定する AsyncHttpClientConfig
を作成する方法を示しています。
Camel 2.9 では、AHC コンポーネントは Async HTTP ライブラリー 1.6.4 を使用します。この新しいバージョンでは、プレーン Bean スタイルの設定のサポートが追加されました。
AsyncHttpClientConfig クラスは、
AsyncHttpClientConfig
で利用可能な設定オプションの getter および setter を提供します。AsyncHttpClientConfigBean
のインスタンスは AHC コンポーネントに直接渡すか、clientConfig
URI パラメーターを使用してエンドポイント URI で参照できます。
Camel 2.9 では、URI で直接設定オプションを設定することも可能です。clientConfig. で始まる URI パラメーターを使用すると、
AsyncHttpClientConfig
のさまざまな設定可能なプロパティーを設定できます。エンドポイント URI で指定されるプロパティーは、clientConfig URI パラメーターによって参照される設定で指定された値とマージされ、clientConfig. パラメーターが優先されるように設定されます。1 つのエンドポイントの設定に依存しないように、参照される AsyncHttpClientConfig
インスタンスは常にエンドポイントごとにコピーされ、以前に作成されたエンドポイントの設定とは関係ありません。以下の例は、clientConfig. タイプの URI パラメーターを使用して AHC コンポーネントを設定する方法を示しています。
from("direct:start") .to("ahc:http://localhost:8080/foo?clientConfig.maxRequestRetry=3&clientConfig.followRedirects=true")
from("direct:start")
.to("ahc:http://localhost:8080/foo?clientConfig.maxRequestRetry=3&clientConfig.followRedirects=true")
関連項目 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!