【发布时间】:2022-01-23 18:48:42
【问题描述】:
我对 Drools 中的流模式有疑问。 我正在使用这个规则
declare MetaMessage
@role(event)
end
rule 'rule1' ruleflow-group 'default'
when
$inMess : MetaMessage() from entry-point 'default'
not(MetaMessage(this != $inMess, this after [0s,10s] $inMess) from entry-point 'default')
then
//do things
end
如果我发送 MetaMessage,我希望规则在指定的 10 秒后执行,但没有任何结果。 如果我发送一个新的 MetaMessage,10 秒后,规则就会执行。
编辑:如果我改变规则并去掉不,它就像一个魅力
我不确定我做错了什么。
这就是我创建 KieBase 的方式
KieBaseConfiguration config = KieServices.Factory.get().newKieBaseConfiguration();
config.setOption(EventProcessingOption.STREAM);
KieBase kieBase = kieHelper.build(config);
KieSession kieSession = kieBase.newKieSession();
编辑 2
每次在 Kafka 队列中插入新的 MetaMessage 时,我都会使用 fireAllRules() 触发规则。
所以我有一个消费者收集消息并将它们插入到这样的会话中
EntryPoint ep = kieSession.getEntryPoint("default");
ep.insert(metaMessage);
kieSession.fireAllRules();
编辑 3 我有另一个与前一个一起执行的简单规则
rule "AccumulatedTest"
when
accumulate(MetaMessage( timestamp > 0 ); $cnt: count(1))
then
log.info("Message n: "+$cnt);
end
第一次插入消息时(新创建 kieSession 时)我得到信息“消息 n:0”。 但随后这条规则不再触发。
如果在会话中插入任何其他消息,则规则不会触发
【问题讨论】:
-
你是怎么遵守规则的? fireAllRules() 还是 fireUntilHalt()?
-
@EstebanAliverti 我正在使用 fireAllRules()
-
只有一次?或者您是否有某种定期执行
fireAllRules()的预定作业? -
每当有一个新的
MetaMessage使用java时,我都会使用fireAllRules() -
我编辑了这个问题,提供了有关
fireAllRules()电话的更多详细信息
标签: java spring-boot drools