规则集的热部署是指在规则集版本发生变化时,规则执行组件 (XU) 可以自动接收到规则集版本更新的通知 , 从而自动加载最新的规则集,整个过程用户不需要重启任何组件。业务规则管理系统实现了业务规则和应用程序逻辑的分离,业务用户可以在业务逻辑放生变化时,即时的更新业务规则,部署最新的规则集到规则执行服务器。而规则集的热部署则保证了在业务逻辑发生变化时,业务规则管理">系统服务的连续性。
ODM 规则执行服务器提供了两种支持规则集热部署的配置方式,JMX 通知与 TCP/IP 通知,本文接下来将为您详细介绍这两种方式的配置与原理。
JMX 通知的规则集热部署
Rule Execution Server(RES)控制台和规则执行组件 (XU)的默认配置方式就是 JMX 通知,
在 RES 控制台 Web 应用 (jrules-res-management-APPSEVER.ear) 的配置文件 (web.xml) 中,默认定义了如下配置信息,指定采用 JMX 通知方式:
<context-param> <description>
Management Protocol</description> <param-name>management.protocol</param-name> <param-value>jmx</param-value> </context-param>
在 XU 资源适配器的部署描述文件中(ra.xml),默认定义了如下 XU 插件信息:
<config-property> <config-property-name>
plugins</config-property-name> <config-property-type>java.lang.String</config-property-type> <config-property-value> {pluginClass=ilog.rules.res.xu.management.IlrManagementMBeanPlugin, xuName=default, protocol=jmx}, </config-property-value> </config-property>
其中的 protocol 指定了规则集热部署的通知方式为 JMX,即在部署 XU 资源适配器时,同时会在运行在应用服务器 JVM 上的 MBean 服务器上注册一个类型为 IlrXUManagement 的 MBean,该 MBean 提供 notifyRulesetArchiveChanged 操作,用来接收从 RES 控制台发来的规则集变更通知。其具体工作流程如下:
用户通过 RES 控制台更新一个规则集 RES 控制台在 MBean 服务器上
查找所有注册的 IlrXUManagement MBean. RES 控制台 发送规则集变更通知给注册在 MBean 服务器上所
有的 IlrXUManagement MBean,XU 接到通知后加载最新的规则集。
在安装好 XU 资源适配器和 RES 控制台后,可以登录 RES 控制台,进入“诊断”视图,点击“运行诊断”按钮,可以看到如下图 1 所示的 XU MBean。
图 1. XU MBean
TCP/IP 通知的规则集热部署
除了 JMX 通知方式的规则集热部署外,从 8.0.1 版本开始,ODM 还提供了 TCP/IP 通知方式的规则集热部署,其具体配置方式如下:
在 RES 控制台 Web 应用的配置文件 (web.xml) 中,需定义如下配置信息,指定采用 TCP/IP 通知方式,及 TCP/IP 通知服务器运行的端口:
<context-param> <description>Management Protocol</description> <param-name>management.protocol</param-name> <param-value>tcpip</param-value> </context-param> <context-param> <description>Management TCPIP Protocol Port</description> <param-name>management.tcpip.port</param-name> <param-value> TCPIP_PORT</param-value> </context-param>
在 XU 资源适配器的部署描述文件中(ra.xml),需定义如下 XU 插件信息:
<config-property> <config-property-name>plugins</config-property-name> <config-property-type>java.lang.String</config-property-type> <config-property-value> {pluginClass=ilog.rules.res.xu.management.IlrManagementMBeanPlugin, xuName=default, protocol=tcpip,tcpip.port=TCPIP_PORT,tcpip.host=RES_CONSOLE_HOST,tcpip.retryInterval=INTERVAL}, </config-property-value> </config-property>
其中的 protocol 指定了规则集热部署的通知方式为 TCP/IP 通知,TCPIP_PORT 为运行在 RES 控制台上的 TCP/IP 通知服务器的端口,RES_CONSOLE_HOST 为运行 RES 控制台的主机的域名或 IP,INTERVAL 为连接 RES 控制台上的 TCP/IP 通知服务器失败后再次尝试连接的等待时间(以毫秒为单位)。TCP/IP 通知的具体工作流程如下:
RES 控制台在启动时在指定的 TCPIP_PORT 上运行一个 TCP/IP 通知服务器。 XU 启动时在每隔 INTERVAL 时间会尝试与上一步 RES 控制台启动的 TCP/IP 通知服务器建立 TCP/IP 常连接。 用户通过 RES 控制台更新一个规则集。 RES 控制台将规则集变更通知发送给与当前 TCP/IP 通知服务器建立常连接的 XU 客户端。 XU 接到通知后加载最新的规则集
需要注意的是,虽然这里的 protocol 显示指定了 TCP/IP 通知管理,JMX 通知管理仍将会被同时使用,部署 XU 时,还会同 JXM 通知一样,在运行在当前服务器 JVM 上的 MBean 服务器上,注册一个类型为 IlrXUManagement 的 MBean,运行在当前服务器或与当前服务器处于同一 Cell 或 Domain 的服务器上的 RES 控制台仍可以通过该 MBean 来发送规则集变更给 XU。
在安装好 XU 资源适配器和 RES 控制台后,可以登录 RES 控制台,进入“诊断”视图,点击“运行诊断”按钮,可以看到如下图 2 所示的通过 TCP/IP 连接管理的 XU。
图 2. XU TCP/IP
JXM 与 TCP/IP 热部署的优缺点
ODM 从 8.0.1 版本之后才开始支持 TCP/IP 通知,而之前的版本一直都只是支持 JXM 通知的管理方式。JXM 通知要求 XU 和 RES 控制台运行于同一服务器或者运行 XU 和 RES 控制台的服务器处于同一个 Cell 或 Domain,这样 XU MBean 才会对 RES 控制台可见,从而 RES 控制台可以发送规则集变更通知给 XU。而有时候,我们希望管理应用 RES 控制台和执行服务 XU 运行在不同的服务器上,并且它们不属于同一个 Cell 或 Domain,这时候需要使用 TCP/IP 通知。
使用 JXM 通知管理的优势和不足
优势
配置简单,RES 控制台和 XU 的默认配置就是 JXM 通知管理 一个 XU 可以被多个 RES 控制台同时管理 可以有多个 RES 控制台实例构成集群,共同管理处于同一 Cell 或 Domain 上多个服务器上的 XU
不足
RES 控制台和 XU 必须运行于同一个服务器或者运行它们的服务器处于同一个 Cell 或 Domain 管理单元 多个 RES 控制台构成的集群依赖于管理服务器(如 WAS ND
Deploy Manager),当管理服务器关闭时,RES 控制台之间将无法同步,此时 RES 控制台只能管理运行于同一服务器上的 XU
使用 TCP/IP 通知管理的优势和不足
优势
控制台和 XU 可以运行在不同的服务器上,运行它们的服务器也不需要运行在同一个 Cell 或 Domain 一个 RES 控制台可以管理多个 XU 实例,并且不受管理服务器是否运行的限制。
不足
无法为多个 RES 控制台配置集群,一个 XU 只能受管与某一个 RES 控制台。
小结
本文向您介绍了 ODM 规则执行服务器提供的两种支持规则集热部署的方式,JMX 通知与 TCP/IP 通知,以及它们的原理和配置方式,并通过比较向您介绍了这两种方式的优缺点。当您需要保证 RES 控制台的高可靠性时,可以选择 JXM 通知并为 RES 控制台配置集群。当你需要 RES 控制台和 XU 运行于不同服务器上,并通过一个 RES 控制台管理多个 XU 时,可以选择 TCP/IP 通知。