30.4. 配置智能路由器行为
在有多个 KIE Servers 的集群环境中,默认行为是并行向每个 KIE 服务器发送请求,每个 KIE 服务器的主机都使用"round-robin"方法发送请求。在以下示例环境中,每个 KIE 服务器都使用相同的 KJAR 部署,但每个 KJAR 版本不同:
| 服务器名称 | KJAR 版本 | 主机 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
如果您发送请求,请求将发送到 kie-server1 (129.0.1.2), kie-server2 (129.0.2.3), 和 kie-server3 (129.0.3.1)。
如果您发送第二个请求,则该请求将发送到每个 KIE 服务器的下一主机。例如,kie-server1 (129.0.1.3), kie-server2 (129.0.2.1), 和 kie-server3 (129.0.3.2)。
Smart Router 有三个组件,您可以修改以更改此行为:
- ContainerResolver
- 负责在与服务器交互时使用的容器 ID 的组件。
- RestrictionPolicy
- 负责禁止智能路由器使用特定端点的组件。
- ConfigRepository
- 负责维护智能路由器配置的组件。这主要与路由表相关。
- IdentityService
- 负责使用自己的身份提供程序的组件。这适用于 KIE 服务器实例。
智能路由器使用 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
例如,对于以上情况,您可以自定义 ContainerResolver,使智能路由器在所有可用 KIE 服务器间搜索 KJAR 进程的最新版本,并始终从该进程开始。这种情境意味着每个 KIE 服务器托管了一个 KJAR,每个版本将共享相同的别名。
由于 Smart Router 是可执行的 jar,因此要包含扩展,因此您需要修改该命令。例如:
java -cp LOCATION/router-ext-7.12.0.redhat-00008.jar:rhpam-7.12.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