骆驼祥子大事件时间轴_骆驼中的事件处理

骆驼祥子大事件时间轴

在上一篇有关骆驼-小水车的文章中,我介绍了骆驼-小水车的组件,并使用骆驼路线中的规则实现了一些简单的面向任务的过程。 今天,我将展示如何通过添加事件处理来扩展此示例。

那么如何描述一个事件呢? 每个事件在某个时间发生并持续一段时间,事件以特定顺序发生。 然后,我们有一个“事件云”,我们要从中识别那些事件,这些事件形成了一些有趣的关联。 在这里,Drools的用法变得合理了-我们不必对每个事件都做出React,只需为这些有趣的关联描述一组规则和后果。 Drools引擎将找到它们并触发匹配规则。

假设我们的系统必须监视分配给用户的任务的执行。 创建任务后,用户有10天的时间完成任务。 如果他不这样做,则应发送剩余的电子邮件。

规则定义如下所示:

import org.apache.camel.component.drools.stateful.model.*
global org.apache.camel.component.drools.CamelDroolsHelper helperdeclare TaskCreated@role( event )@expires( 365d )
enddeclare TaskCompleted@role( event )@expires( 365d )
endrule "Task not completed after 10 days"when$t : TaskCreated()not(TaskCompleted(name==$t.name, this after [-*, 10d] $t))thenhelper.send("direct:escalation", $t.getName());
end

如您所见,事件有两种类型:TaskCreated(当系统将任务分配给用户时)和TaskCompleted(当用户完成任务时)。 我们通过“名称”属性将二者关联起来。 首先,我们需要通过添加@role(event)和@expires批注将模型类声明为事件。 然后我们描述规则:“当TaskCreated事件10天后没有TaskCompleted事件时,将任务名称发送到direct:escalation路线”。 同样,这可能是声明式编程的示例–我们不必指定任务的实际名称,而只需按名称将TaskCreated与TaskCompleted事件相关联。

在此示例中,我使用了“之后”时间运算符。 有关其他说明,请参阅Drools Fusion文档 。

最后,这是JUnit测试代码片段:

public class TaskEventsTest extends GenericTest {DefaultCamelContext ctx;@Testpublic void testCompleted() throws Exception {insertAdvanceDays(new TaskCreated("Task1"), 4);assertContains(0);insertAdvanceDays(new TaskCompleted("Task1"), 4);advanceDays(5);assertContains(0);}@Testpublic void testNotCompleted() throws Exception {insertAdvanceDays(new TaskCreated("Task1"), 5);assertContains(0);advanceDays(5);assertContains("Task1");}@Testpublic void testOneNotCompleted() throws Exception {ksession.insert(new TaskCreated("Task1"));insertAdvanceDays(new TaskCreated("Task2"), 5);assertContains(0);insertAdvanceDays(new TaskCompleted("Task1"), 4);assertContains(0);advanceDays(1);assertContains("Task2");advanceDays(10);assertContains("Task2");}@Overrideprotected void setUpResources(KnowledgeBuilder kbuilder) throws Exception {kbuilder.add(new ReaderResource(new StringReader(IOUtils.toString(getClass().getResourceAsStream("/stateful/task-event.drl")))), ResourceType.DRL);}@Overridepublic void setUpInternal() throws Exception {this.ctx = new DefaultCamelContext();CamelDroolsHelper helper = new CamelDroolsHelper(ctx, new DefaultExchange(ctx)) {public Object send(String uri, Object body) {sentStuff.add(body.toString());return null;};};ksession.setGlobal("helper", helper);}
}
  • 您可以在此处找到此示例的源代码。

参考:来自我们的JCG合作伙伴 Piotr Jagielski在全栈JVM开发 中使用骆驼控件进行事件处理 …博客。

翻译自: https://www.javacodegeeks.com/2014/03/event-processing-in-camel-drools.html

骆驼祥子大事件时间轴

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2019年春季 2205-22T开放英语2 参考试题

试卷代号:2205 2018—2019学年度第二学期期末考试 开放英语2试题 2019年7月 注 意 事 项一、将你的准考证号、学生证号、姓名及分校(工作站)名称填写在答题纸规定栏内。 考试结束后,把试卷和答题纸放在桌上。试题和答题纸均不得带…

zigbee工业应用技术

1、简介 在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有这很多的有点,但是任然存在很多的缺陷。对于工业,家庭自动化控制和遥测遥控领域而言,蓝牙的技术就显得过为复杂,功耗大,距离近而且组网规模太小等&a…

linux gdb网络调试工具,Linux--gdb调试工具

gdb是强大的调试工具,下面通过一个交换函数来初步认识他main.c#include #include void swap(int a, int b){int t;t a;a b;b t;}int main(){int a 3;int b 4;swap(a, b);printf("a %d\n b %d \n", a, b);}第一步:编译命令gcc -g -Wall …

【渝粤教育】国家开放大学2019年春季 2508学前儿童语言教育 参考试题

试卷代号:2508 2 0 1 9年春季学期期末统一考试 学前儿童语言教育 试题(半开卷) 2019年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试 结束后,把试卷和答题纸放在桌上。…

工业级以太网交换机具有哪些优越特性

与商用交换机相比,工业交换机在性能上要稳定,需要耐受严苛的工作环境。工业交换机产品采用宽温设计,防护等级不低于IP30,支持标准和私有的环网冗余协议。那么,工业级以太网交换机具有哪些优越特性呢?接下来我们就跟随…

工业物联网的应用领域和方向

从一定的程度上来说,物联网可以说是个“旧瓶装新酒”的概念,提出物联网——IoT(Internet of things)这个概念的确算是一种创新,但是也要把这个创新和传统的M2M——机器互联(machine to machine)…

精选枚举代替开关

问题及其解决方案 开关/案例是用大多数命令式编程语言实现的通用控制结构。 开关比一系列的if / else更具可读性。 这是一个简单的示例: // Switch with int literal switch (c) {case 1: one(); break;case 2: two(); break;case 3: three(); break;default: thr…

【渝粤教育】国家开放大学2019年春季 2732土地利用规划 参考试题

试卷代号:2732 土地利用规划 试题 2019年7月 一、单选题(每小题3分.10小题,共30分) 1.降水量的单位为( )。 A.cm B.mm C.m D.ha 2.按照八大类土地…

物联网控制系统

物联网的发展和使用是跨时代的改变,在当今我们这个科技高速发展的时代,智能控制就是改善我们生活水平的主要方式。 随着物联网概念的深入,从智能路灯、智能家居到智慧农业、工业互联网,物联网不断的渗透到了各行各业当中&#xff…

linux基本指令chmod,Linux 常用命令

原标题:Linux 常用命令小编注:此篇文章来自#原创新人#活动,成功参与活动将获得额外100金币奖励此链接!自己开始接触 Linux「Ubuntu」应该是在大学期间, 接触 Unix「Mac OSX」是在工作后的第一份工作,吭哧吭…

POE供电的安全传输距离,网线的选择有哪些建议

POE供电的安全传输距离100米,建议使用超五类全铜网线。用标准以太网线缆传输直流电是可以传输很远的,那为什么传输距离会被限制在100米呢?接下来我们就跟随飞畅科技的小编一起来详细了解下POE供电的安全传输距离。 事实是POE交换机最大传输距…

zigbee是什么,为什么说它最适合智能家居设备

Zigbee是什么? 如果您的家里面有使用一款智能家居技术,那么这款技术就很有可能就是用的zigbee协议。Zigbee是一种无线通信协议,是基于IEEE820.15.4标准的低功耗局域网协议。是根据国际标准规定的,zigbee技术是一种短距离、低功耗的无线通信技…

java开发人员_Java 8:开发人员怎么看?

java开发人员由于Java 8发行倒计时已经开始,因此Java开发人员似乎肯定已经准备好参与其中。 根据Typesafe的一项调查 ,参与其中的开发人员中有65%回答说他们将在24个月的计划中迁移到Java 8,而从中有30%的开发者将在接…

lora模块在牛联网和智慧农业中的应用案列

LoRa为代表的低功率广域网(LPWAN)在全球范围中都得到了广泛的使用,由于它是一种开放式的通信标准,因此不仅是农场的专用网络到农业机械和农产平的状态监测等,都可以使用LoRa系列的产品。 牛联网 物联网不仅仅可以连接物…

工业交换机防护等级介绍

工业交换机防护等级,IP(INGRESS PROTECTION,进入防护)防护等级系统是由IEC(INTERNATIONAL ELECTROTECHNICAL COMMISSION,国际电工协会)所起草。将电器依其防尘防湿气之特性加以分级。这里所指的外物含工具,人的手指等均不可接触到…

休眠多对多教程

介绍: 在本教程中,我们将学习使用Hibernate ManyToMany注释定义和使用多对多实体关联。 上下文构建: 为了继续学习本教程,我们假设我们有两个实体- 雇员和资格: 众所周知,一名雇员可以拥有多个资格。 此外…

深度区分LoRa和LoRaWAN的区别

1.总体介绍 随着物联网技术的飞速发展,NB-IoT、LoRa、SigFox等通信技术名词我们也偶尔有所闻,对于普通人或者是刚刚接触物联网领域的人来说,在一大堆名词前面可能也是分布清楚,本文也将针对LoRa和LoRaWN做详细的介绍和比较。 总体…

工业交换机为何要老化测试

老化测试检测标准可以根据客户指定,无特殊要求即根据国家相应标准进行老化测试检验。老化测试主要是模拟产品在现实使用过程中的各种恶劣条件的高强度测试,同时根据使用的要求,合理地预测产品使用寿命。接下来飞畅科技的小编来为大家详细介绍…

物联网技术lora的简介和应用

物联网的通信传输技术,有很多种常用的方案,除了LORA以外,还有NB-IoT、WIFI、蓝牙、Zigbee、Dustl和sub-1GHz等,不同的通讯技术也有着不同的特点,和各自适合的应用场景。但是对于长距离。低功耗和小数据量的传输的应用场景&#xf…

cp ft wat_Java数组,Wat!

cp ft wat数组可以做一些令人惊讶的事情。 是否是数组? Serializable array new Serializable[9];数组是数组还是标量? 好吧,它是指向数组的标量。 就像 Object o new Object[9];您可以将数组分配给对象,因为它也是对象。 但是…