104.8. 例


以下のルートでは、ハードコーディングされた "Bye World" メッセージを返す HTTP サーバーとして Netty HTTP を使用します。

    from("netty-http:http://0.0.0.0:8080/foo")
      .transform().constant("Bye World");
Copy to Clipboard Toggle word wrap

また、以下に示すように、ProducerTemplate を使用して、Camel を使用してこの HTTP サーバーを呼び出すこともできます。

    String out = template.requestBody("netty-http:http://0.0.0.0:8080/foo", "Hello World", String.class);
    System.out.println(out);
Copy to Clipboard Toggle word wrap

出力として "Bye World" が返されます。

104.8.1. Netty にワイルドカードを一致させるにはどうすればよいですか

デフォルトでは、Netty HTTP は正確な uri にのみ一致します。ただし、Netty に接頭辞を一致させるように指示することはできます。以下に例を示します。

from("netty-http:http://0.0.0.0:8123/foo").to("mock:foo");
Copy to Clipboard Toggle word wrap

上記のルートでは、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");
Copy to Clipboard Toggle word wrap

したがって、Netty は foo で始まるすべてのエンドポイントに一致します。

任意 のエンドポイントに一致させるには、次のようにします。

from("netty-http:http://0.0.0.0:8123?matchOnUriPrefix=true").to("mock:foo");
Copy to Clipboard Toggle word wrap

104.8.2. 同じポートで複数のルートを使用する

同じ CamelContext では、同じポート (例: io.netty.bootstrap.ServerBootstrap インスタンス) を共有する Netty HTTP からの複数のルートを持つことができます。ルートは同じ io.netty.bootstrap.ServerBootstrap インスタンスを共有するため、これを行うには、ルート内で多数のブートストラップオプションを同一にする必要があります。インスタンスは、最初に作成されたルートのオプションで設定されます。

ルートが同一に設定される必要があるオプションは、org.apache.camel.component.netty.NettyServerBootstrapConfiguration 設定クラスで定義されているすべてのオプションです。異なるオプションで別のルートを設定した場合、Camel は起動時に例外を出力し、オプションが同一でないことを示します。これを軽減するには、すべてのオプションが同一であることを確認してください。

同じポートを共有する 2 つのルートの例を次に示します。

同じポートを共有する 2 つのルート

from("netty-http:http://0.0.0.0:{{port}}/foo")
  .to("mock:foo")
  .transform().constant("Bye World");

from("netty-http:http://0.0.0.0:{{port}}/bar")
  .to("mock:bar")
  .transform().constant("Bye Camel");
Copy to Clipboard Toggle word wrap

これは、最初のルートと同一の org.apache.camel.component.netty.NettyServerBootstrapConfiguration オプションを持たない、誤って設定された 2 番目のルートの例です。これにより、Camel は起動時に失敗します。

2 つのルートが同じポートを共有していますが、2 番目のルートの設定が間違っています

そのため、起動に失敗します。

from("netty-http:http://0.0.0.0:{{port}}/foo")
  .to("mock:foo")
  .transform().constant("Bye World");

// we cannot have a 2nd route on same port with SSL enabled, when the 1st route is NOT
from("netty-http:http://0.0.0.0:{{port}}/bar?ssl=true")
  .to("mock:bar")
  .transform().constant("Bye Camel");
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

そしてルートでは、以下に示すようにこのオプションを参照します

<route>
  <from uri="netty-http:http://0.0.0.0:{{port}}/foo?bootstrapConfiguration=#nettyHttpBootstrapOptions"/>
  ...
</route>

<route>
  <from uri="netty-http:http://0.0.0.0:{{port}}/bar?bootstrapConfiguration=#nettyHttpBootstrapOptions"/>
  ...
</route>

<route>
  <from uri="netty-http:http://0.0.0.0:{{port}}/beer?bootstrapConfiguration=#nettyHttpBootstrapOptions"/>
  ...
</route>
Copy to Clipboard Toggle word wrap

詳細とその方法の例は、Netty HTTP サーバーの例を参照してください。

104.8.5. リバースプロキシーの実装

Netty HTTP コンポーネントはリバースプロキシーとして機能できます。その場合、Exchange.HTTP_SCHEMEExchange.HTTP_HOST、および Exchange.HTTP_PORT ヘッダーは、HTTP リクエストのリクエスト行で受信した絶対 URL から設定されます。

以下は、オリジンサーバーからのレスポンスを大文字に変換する HTTP プロキシーの例です。

from("netty-http:proxy://0.0.0.0:8080")
    .toD("netty-http:"
        + "${headers." + Exchange.HTTP_SCHEME + "}://"
        + "${headers." + Exchange.HTTP_HOST + "}:"
        + "${headers." + Exchange.HTTP_PORT + "}")
    .process(this::processResponse);

void processResponse(final Exchange exchange) {
    final NettyHttpMessage message = exchange.getIn(NettyHttpMessage.class);
    final FullHttpResponse response = message.getHttpResponse();

    final ByteBuf buf = response.content();
    final String string = buf.toString(StandardCharsets.UTF_8);

    buf.resetWriterIndex();
    ByteBufUtil.writeUtf8(buf, string.toUpperCase(Locale.US));
}
Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る