日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 骆驼祥子大事件时间轴_骆驼中的事件处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

駱駝祥子大事件時間軸

在上一篇有關駱駝-小水車的文章中,我介紹了駱駝-小水車的組件,并使用駱駝路線中的規(guī)則實現(xiàn)了一些簡單的面向任務的過程。 今天,我將展示如何通過添加事件處理來擴展此示例。

那么如何描述一個事件呢? 每個事件在某個時間發(fā)生并持續(xù)一段時間,事件以特定順序發(fā)生。 然后,我們有一個“事件云”,我們要從中識別那些事件,這些事件形成了一些有趣的關聯(lián)。 在這里,Drools的用法變得合理了-我們不必對每個事件都做出React,只需為這些有趣的關聯(lián)描述一組規(guī)則和后果。 Drools引擎將找到它們并觸發(fā)匹配規(guī)則。

假設我們的系統(tǒng)必須監(jiān)視分配給用戶的任務的執(zhí)行。 創(chuàng)建任務后,用戶有10天的時間完成任務。 如果他不這樣做,則應發(fā)送剩余的電子郵件。

規(guī)則定義如下所示:

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(當系統(tǒng)將任務分配給用戶時)和TaskCompleted(當用戶完成任務時)。 我們通過“名稱”屬性將二者關聯(lián)起來。 首先,我們需要通過添加@role(event)和@expires批注將模型類聲明為事件。 然后我們描述規(guī)則:“當TaskCreated事件10天后沒有TaskCompleted事件時,將任務名稱發(fā)送到direct:escalation路線”。 同樣,這可能是聲明式編程的示例–我們不必指定任務的實際名稱,而只需按名稱將TaskCreated與TaskCompleted事件相關聯(lián)。

在此示例中,我使用了“之后”時間運算符。 有關其他說明,請參閱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開發(fā) 中使用駱駝控件進行事件處理 …博客。

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

駱駝祥子大事件時間軸

總結(jié)

以上是生活随笔為你收集整理的骆驼祥子大事件时间轴_骆驼中的事件处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。