第 19 章 HA CEP 客户端和服务器代码的要求
在为高可用性 CEP 开发客户端和服务器代码时,请遵循某些额外的要求。
kie-remote API
客户端代码必须使用 kie-remote API,而不是 kie API。kie-remote API 在 org.kie:kie-remote Maven 工件中指定。您可以在 kie-remote Maven 模块中找到源代码。
显式时间戳
决策引擎需要确定发生事件的顺序。因此,每个事件都必须为其分配一个关联的时间戳。在高可用性环境中,使此时间戳成为对事件建模的 JavaBean 的属性。使用 @Timestamp 注释注解事件类,其中 timestamp 属性本身的名称是参数,如下例所示:
如果没有提供 timestamp 属性,Drools 根据客户端将事件插入到远程会话时,为每个事件分配一个时间戳。但是,这种机制取决于客户端机器上的时钟。如果不同客户端间的时钟分离,则这些主机插入的事件之间可能会出现不一致的情况。
非内存操作的 Lambda 表达式
必须在集群的每个节点中处理工作内存操作(用于插入、修改或删除决策引擎工作内存中的信息)。不是内存操作的操作必须只在领导执行。
例如,代码可能包括以下规则:
触发此规则后,每个节点上都必须将人标记为 adult。但是,只有领导必须发送电子邮件,以便仅发送一封电子邮件副本。
因此,在您的代码中,将电子邮件操作(称为 副作用)嵌套在 lambda 表达式中,如下例所示: