第3章 AHC


Async Http Client (AHC)コンポーネント

Camel 2.8 から利用可能
ahc: コンポーネントは、(HTTP を使用して外部サーバーを呼び出すクライアントとして)外部 HTTP リソースを消費する HTTP ベースの エンドポイント を提供します。コンポーネントは Async Http Client ライブラリーを使用します。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-ahc</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

URI 形式

ahc:http://hostname[:port][/resourceUri][?options]
ahc:https://hostname[:port][/resourceUri][?options]
Copy to Clipboard Toggle word wrap
デフォルトでは、HTTP にポート 80 を使用し、HTTPS には 443 を使用します。
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。

AhcEndpoint オプション

Expand
名前 デフォルト値 説明
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 オプション

Expand
名前 デフォルト値 説明
クライアント null カスタム com.ning.http.client.AsyncHttpClient を使用するには、以下を行います。
clientConfig null AsyncHttpClients を設定するには、カスタムの 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 のオプションよりも優先されます。

メッセージヘッダー

Expand
名前 タイプ 説明
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 を出力します。オプション throwExceptionOnFailurefalse に設定すると、失敗した応答コードに対して 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");
Copy to Clipboard Toggle word wrap
同等の Spring の例:
<camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
  <route>
    <from uri="direct:start"/>
    <to uri="ahc:http://oldhost"/>
  </route>
</camelContext>
Copy to Clipboard Toggle word wrap
メッセージのキー Exchange.HTTP_URI でヘッダーを追加することで、HTTP エンドポイント URI を上書きできます。
from("direct:start")
    .setHeader(Exchange.HTTP_URI, constant("http://newhost"))
    .to("ahc:http://oldhost");
Copy to Clipboard Toggle word wrap

URI パラメーターの設定

ahc プロデューサーは、HTTP サーバーに送信される URI パラメーターをサポートします。URI パラメーターは、エンドポイント URI で直接設定することも、メッセージ上でキー Exchange.HTTP_QUERY を持つヘッダーとして設定できます。
from("direct:start")
	    .to("ahc:http://oldhost?order=123&detail=short");
Copy to Clipboard Toggle word wrap
または、ヘッダーで提供されるオプション:
from("direct:start")
            .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
	    .to("ahc:http://oldhost");
Copy to Clipboard Toggle word wrap

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");
Copy to Clipboard Toggle word wrap
同等の Spring の例:
<camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
  <route>
    <from uri="direct:start"/>
    <setHeader headerName="CamelHttpMethod">
        <constant>POST</constant>
    </setHeader>
    <to uri="ahc:http://www.google.com"/>
    <to uri="mock:results"/>
  </route>
</camelContext>
Copy to Clipboard Toggle word wrap

charset の設定

POST を使用してデータを送信する場合は、Exchange プロパティーを使用して charset を設定できます。
exchange.setProperty(Exchange.CHARSET_NAME, "iso-8859-1");
Copy to Clipboard Toggle word wrap

エンドポイント 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);
Copy to Clipboard Toggle word wrap

メッセージの 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);
Copy to Clipboard Toggle word wrap
上記のヘッダー値では、先頭に ? を付け 、通常 & amp; 文字でパラメーターを分離することができることに注意してください。

レスポンスコードの取得

AHC コンポーネントから HTTP 応答コードを取得するには、Exchange.HTTP_RESPONSE_CODE で Out メッセージヘッダーから値を取得します。
Exchange exchange = template.send("ahc:http://www.google.com/search", new Processor() {
            public void process(Exchange exchange) throws Exception {
                exchange.getIn().setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq"));
            }
   });
   Message out = exchange.getOut();
   int responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
Copy to Clipboard Toggle word wrap

AsyncHttpClient の設定

AsyncHttpClient クライアントは AsyncHttpClientConfig を使用してクライアントを設定します。詳細は、Async Http Client のドキュメントを参照してください。
以下の例は、ビルダーを使用して AhcComponent で設定する AsyncHttpClientConfig を作成する方法を示しています。
// create a client config builder
AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder();
// use the builder to set the options we want, in this case we want to follow redirects and try
// at most 3 retries to send a request to the host
AsyncHttpClientConfig config = builder.setFollowRedirects(true).setMaxRequestRetry(3).build();

// lookup AhcComponent
AhcComponent component = context.getComponent("ahc", AhcComponent.class);
// and set our custom client config to be used
component.setClientConfig(config);
Copy to Clipboard Toggle word wrap
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")
Copy to Clipboard Toggle word wrap

関連項目

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat