104.8. 例
以下のルートでは、ハードコーディングされた "Bye World" メッセージを返す HTTP サーバーとして Netty HTTP を使用します。
from("netty-http:http://0.0.0.0:8080/foo")
.transform().constant("Bye World");
from("netty-http:http://0.0.0.0:8080/foo")
.transform().constant("Bye World");
また、以下に示すように、ProducerTemplate を使用して、Camel を使用してこの HTTP サーバーを呼び出すこともできます。
String out = template.requestBody("netty-http:http://0.0.0.0:8080/foo", "Hello World", String.class);
System.out.println(out);
String out = template.requestBody("netty-http:http://0.0.0.0:8080/foo", "Hello World", String.class);
System.out.println(out);
出力として "Bye World" が返されます。
104.8.1. Netty にワイルドカードを一致させるにはどうすればよいですか リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Netty HTTP は正確な uri にのみ一致します。ただし、Netty に接頭辞を一致させるように指示することはできます。以下に例を示します。
from("netty-http:http://0.0.0.0:8123/foo").to("mock:foo");
from("netty-http:http://0.0.0.0:8123/foo").to("mock:foo");
上記のルートでは、Netty HTTP は URI が完全に一致する場合にのみ一致します。そのため、http://0.0.0.0:8123/foo と入力すると一致しますが、http://0.0.0.0:8123/foo/bar と入力すると一致しません。
したがって、ワイルドカードマッチングを有効にする場合は、次のようにします。
from("netty-http:http://0.0.0.0:8123/foo?matchOnUriPrefix=true").to("mock:foo");
from("netty-http:http://0.0.0.0:8123/foo?matchOnUriPrefix=true").to("mock:foo");
したがって、Netty は foo で始まるすべてのエンドポイントに一致します。
任意 のエンドポイントに一致させるには、次のようにします。
from("netty-http:http://0.0.0.0:8123?matchOnUriPrefix=true").to("mock:foo");
from("netty-http:http://0.0.0.0:8123?matchOnUriPrefix=true").to("mock:foo");
104.8.2. 同じポートで複数のルートを使用する リンクのコピーリンクがクリップボードにコピーされました!
同じ CamelContext では、同じポート (例: io.netty.bootstrap.ServerBootstrap インスタンス) を共有する Netty HTTP からの複数のルートを持つことができます。ルートは同じ io.netty.bootstrap.ServerBootstrap インスタンスを共有するため、これを行うには、ルート内で多数のブートストラップオプションを同一にする必要があります。インスタンスは、最初に作成されたルートのオプションで設定されます。
ルートが同一に設定される必要があるオプションは、org.apache.camel.component.netty.NettyServerBootstrapConfiguration 設定クラスで定義されているすべてのオプションです。異なるオプションで別のルートを設定した場合、Camel は起動時に例外を出力し、オプションが同一でないことを示します。これを軽減するには、すべてのオプションが同一であることを確認してください。
同じポートを共有する 2 つのルートの例を次に示します。
同じポートを共有する 2 つのルート
これは、最初のルートと同一の org.apache.camel.component.netty.NettyServerBootstrapConfiguration オプションを持たない、誤って設定された 2 番目のルートの例です。これにより、Camel は起動時に失敗します。
2 つのルートが同じポートを共有していますが、2 番目のルートの設定が間違っています
そのため、起動に失敗します。
104.8.3. 複数のルートで同じサーバーのブートストラップ設定を再利用する リンクのコピーリンクがクリップボードにコピーされました!
org.apache.camel.component.netty.NettyServerBootstrapConfiguration 型の単一インスタンスで共通サーバーのブートストラップオプションを設定することで、Netty HTTP コンシューマーで bootstrapConfiguration オプションを使用して、すべてのコンシューマーで同じオプションを参照および再利用できます。
<bean id="nettyHttpBootstrapOptions" class="org.apache.camel.component.netty.NettyServerBootstrapConfiguration"> <property name="backlog" value="200"/> <property name="connectionTimeout" value="20000"/> <property name="workerCount" value="16"/> </bean>
<bean id="nettyHttpBootstrapOptions" class="org.apache.camel.component.netty.NettyServerBootstrapConfiguration">
<property name="backlog" value="200"/>
<property name="connectionTimeout" value="20000"/>
<property name="workerCount" value="16"/>
</bean>
そしてルートでは、以下に示すようにこのオプションを参照します
104.8.4. OSGi コンテナー内の複数のバンドルにまたがる複数のルートで同じサーバーのブートストラップ設定を再利用する リンクのコピーリンクがクリップボードにコピーされました!
詳細とその方法の例は、Netty HTTP サーバーの例を参照してください。
104.8.5. リバースプロキシーの実装 リンクのコピーリンクがクリップボードにコピーされました!
Netty HTTP コンポーネントはリバースプロキシーとして機能できます。その場合、Exchange.HTTP_SCHEME、Exchange.HTTP_HOST、および Exchange.HTTP_PORT ヘッダーは、HTTP リクエストのリクエスト行で受信した絶対 URL から設定されます。
以下は、オリジンサーバーからのレスポンスを大文字に変換する HTTP プロキシーの例です。