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

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

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

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

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

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

from("netty4-http:http://0.0.0.0:{{port}}/bar")
  .to("mock:bar")
  .transform().constant("Bye Camel");

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

2 つのルートが同じポートを共有しているが、2 番目のルートが正しく設定されておらず、起動に失敗する

from("netty4-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("netty4-http:http://0.0.0.0:{{port}}/bar?ssl=true")
  .to("mock:bar")
  .transform().constant("Bye Camel");

242.7.1. 複数のルートで同じサーバーのブートストラップ設定を再利用する

org.apache.camel.component.netty4.NettyServerBootstrapConfiguration タイプの単一インスタンスで共通サーバーブートストラップオプションを設定することにより、Netty4 HTTP コンシューマーで bootstrapConfiguration オプションを使用して、すべてのコンシューマーで同じオプションを参照および再利用できます。

<bean id="nettyHttpBootstrapOptions" class="org.apache.camel.component.netty4.NettyServerBootstrapConfiguration">
  <property name="backlog" value="200"/>
  <property name="connectionTimeout" value="20000"/>
  <property name="workerCount" value="16"/>
</bean>

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

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

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

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

242.7.2. OSGi コンテナー内の複数のバンドルにまたがる複数のルートで同じサーバーのブートストラップ設定を再利用する

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