30.4. 配置智能路由器行为
在具有多个 KIE 服务器的集群环境中,默认行为是并行向每个 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)
。
智能路由器有三个组件,您可以修改以更改此行为:
- 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,每个版本将共享相同的别名。
由于智能路由器是可执行的 jar,因此若要包含扩展,您需要修改该命令。例如:
java -cp LOCATION/router-ext-7.11.0.redhat-00005.jar:rhpam-7.11.0-smart-router.jar org.kie.server.router.KieServerRouter
java -cp LOCATION/router-ext-7.11.0.redhat-00005.jar:rhpam-7.11.0-smart-router.jar org.kie.server.router.KieServerRouter
启动该服务后,您将看到指示用于组件的实现的日志输出: