ODM规则执行服务器RES支持热部署的两种方式

规则集的热部署是指在规则集版本发生变化时,规则执行组件 (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 通知。

时间: 2024-08-04 03:22:09

ODM规则执行服务器RES支持热部署的两种方式的相关文章

详解Android提交数据到服务器的两种方式四种方法_Android

Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法. 代码比较简单,这里不去过多的阐述,直接看代码. /** * @author Dylan * 本类封装了Android中向web服务器提交数据的两种方式四种方法 */ public class SubmitDataByHttpClientAndOrdinaryWay { /** * 使用get请求以普通方式提交数据 * @param map 传

详解Android提交数据到服务器的两种方式四种方法

Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法. 代码比较简单,这里不去过多的阐述,直接看代码. /** * @author Dylan * 本类封装了Android中向web服务器提交数据的两种方式四种方法 */ public class SubmitDataByHttpClientAndOrdinaryWay { /** * 使用get请求以普通方式提交数据 * @param map 传

用PHP程序实现支持页面后退的两种方法

用PHP程序实现支持页面后退的两种方法 在开发过程中,往往因为表单出错而返回页面的时候填写的信息都不见了,为了支持页面回跳,可以通过两种方法实现. 第一,使用Header方法设置消息头Cache-control header('Cache-control: private, must-revalidate');  //支持页面回跳 第二,使用session_cache_limiter方法 //注意要写在session_start方法之前session_cache_limiter('private

python: 多线程实现的两种方式及让多条命令并发执行

一 概念介绍         Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.         Thread模块是比较底层的模块,Threading模块是对Thread做了一些包装的,可以更加方便的被使用.         另外在工作时,有时需要让多条命令并发的执行, 而不是顺序

Javscript轮播 支持平滑和渐隐两种效果(可以只有两张图)

原文:Javscript轮播 支持平滑和渐隐两种效果(可以只有两张图) 先上两种轮播效果:渐隐和移动   效果一:渐隐 1 2 3 4 效果二:移动 1 2 3 4   接下来,我们来大致说下整个轮播的思路: 一.先来看简单的,移动的,先上来一个图----移动效果图: 说明:       基本原则就是顺序是按照当前显示的为基准:如当前为2,那么顺序就是2,3,4,1:如当前为3,那么顺序就是3,4,1,2.以此类推.       整个移动划分为三种:1.下一个  2.上一个  3.任意个    

javaweb-java根据ip判断网络连接情况(i除Java执行ping命令和InetAddress这两种方式)

问题描述 java根据ip判断网络连接情况(i除Java执行ping命令和InetAddress这两种方式) 因为ava执行ping命令和InetAddress这两种方式执行速度太慢了,有没有更好的解决方法??? 解决方案 获得客户端真实IP地址的方法一: public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return r

让PHP支持页面回退的两种方法_php技巧

在开发过程中,往往因为表单出错而返回页面的时候填写的信息都不见了,为了支持页面回跳,可以通过两种方法实现. 第一,使用Header方法设置消息头Cache-control header('Cache-control: private, must-revalidate');  //支持页面回跳   第二,使用session_cache_limiter方法 //注意要写在session_start方法之前  session_cache_limiter('private, must-revalidat

让PHP支持页面回退的两种方法[转]_php技巧

在开发过程中,往往因为表单出错而返回页面的时候填写的信息都不见了,为了支持页面回跳,可以通过两种方法实现. 第一,使用Header方法设置消息头Cache-control header('Cache-control: private, must-revalidate');  //支持页面回跳   第二,使用session_cache_limiter方法 //注意要写在session_start方法之前  session_cache_limiter('private, must-revalidat

SQLSERVER中得到执行计划的两种方式_MsSql

得到执行计划的方式有两种: 1.一种是在指令的前面打开一些开关,让执行计划信息打在结果集里,这种方法比较适合在一个测试环境里对单个语句调优. 这些开关最常用的有 复制代码 代码如下: SET SHOWPLAN_ALL ON SET SHOWPLAN_ALL ON --(是不是reuse了一个执行计划,SQSERVERL有没有觉得缺少索引),只能在XML的输出里看到 SET STATISTICS PROFILE ON 还有如果使用SSMS的话,可以用快捷键:Ctrl+L 小写L 他会执行你的语句并