4.4. Smart Router 動作の設定

KIE Server が複数あるクラスター環境では、デフォルトの動作は各 KIE Server に並行して要求を送信し、各 KIE Server のホストには "round-robin" 方式を使用して要求が送信されます。以下の例の環境では、各 KIE Server は同じ KJAR でデプロイされますが、KJAR のバージョンはそれぞれ異なります。

表4.1 環境の例

サーバー名KJAR バージョンホスト

kie-server1

kjar:1.0 (alias=kjar, group-id=com.example, artifact-id=sample-kjar, version=1.0)

129.0.1.1, 129.0.1.2, 129.0.1.3

kie-server2

kjar:2.0 (alias=kjar, group-id=com.example, artifact-id=sample-kjar, version=2.0)

129.0.2.1, 129.0.2.2, 129.0.2.3

kie-server3

kjar:3.0 (alias=kjar, group-id=com.example, artifact-id=sample-kjar, version=3.0)

129.0.3.1, 129.0.3.2, 129.0.3.3

要求を送信する場合には、要求が kie-server1 (129.0.1.2)kie-server2 (129.0.2.3) および kie-server3 (129.0.3.1) に送信されます。

2 番目の要求を送信する場合には、要求は、各 KIE Server の次のホストに送信されます。例: kie-server1 (129.0.1.3)kie-server2 (129.0.2.1) および kie-server3 (129.0.3.2)

Smart Router には変更可能なコンポーネントが 3 つあり、この動作を変更できます。

ContainerResolver
サーバーを操作する時に使用するコンテナー ID を検索するコンポーネント
RestrictionPolicy
Smart Router が特定のエンドポイントを使用でいないようにするコンポーネント
ConfigRepository
Smart Router 設定を維持するコンポーネント。これは主にルーティングテーブルに関係します。
IdentityService
独自の ID プロバイダーを使用できるようにするコンポーネント。これは KIE Server インスタンス用です。

Smart Router は ServiceLoader ユーティリティーを使用してこれらのコンポーネントを実装します。

ContainerResolver
META-INF/services/org.kie.server.router.spi.ContainerResolver
RestrictionPolicy
META-INF/services/org.kie.server.router.spi.RestrictionPolicy
ConfigRepository
META-INF/services/org.kie.server.router.spi.ConfigRepository
IdentityService
META-INF/services/org.kie.server.router.identity.IdentityService

たとえば、上記のシナリオでは、Smart Router が利用可能な KIE Server から最新バージョンの KJAR プロセスを検索して、そのプロセスで常に開始するように、ContainerResolver をカスタマイズできます。このシナリオでは、各 KIE Server は KJAR を 1 つホストして、バージョンはすべて同じエイリアスを共有します。

Smart Router は実行可能な jar であるため、拡張子を追加するには、コマンドを変更する必要があります。以下に例を示します。

java -cp LOCATION/router-ext-7.7.1.redhat-00002.jar:rhpam-7.8.0-smart-router.jar org.kie.server.router.KieServerRouter

サービスが開始されると、コンポーネントに使用されている実装を示すログ出力が表示されます。

Mar 01, 2017 1:47:10 PM org.kie.server.router.KieServerRouter <init>
INFO: KIE Server router repository implementation is InMemoryConfigRepository
Mar 01, 2017 1:47:10 PM org.kie.server.router.proxy.KieServerProxyClient <init>
INFO: Using 'LatestVersionContainerResolver' container resolver and restriction policy 'ByPassUserNotAllowedRestrictionPolicy'
Mar 01, 2017 1:47:10 PM org.xnio.Xnio <clinit>
INFO: XNIO version 3.3.6.Final
Mar 01, 2017 1:47:10 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.3.6.Final
Mar 01, 2017 1:47:11 PM org.kie.server.router.KieServerRouter start
INFO: KieServerRouter started on localhost:9000 at Wed Mar 01 13:47:11 CET 2017