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

同じ CamelContext で、同じポート (org.jboss.netty.bootstrap.ServerBootstrap インスタンスなど) を共有する Netty HTTP からの複数のルートを持つことができます。ルートは同じ org.jboss.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");

そして、これは、1 番目のルートと同じ 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");

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

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="connectTimeout" value="20000"/>
  <property name="workerCount" value="16"/>
</bean>

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

<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>

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

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