`

通过eventTrigger,JMS实现业务的异步处理

 
阅读更多
说明:实现对用户操作的跟踪。

eventTrigger来发送message来实现跨模块,异步处理。
可以提高系统响应速度(只需持久化当前entity的状态,而后续的处理则交给监听器来实现)。

1. 在系统特定位置配置如reg.xml的的配置文件。配置文件描述了模块名,队列名等详细信息。
内容如下
<EVENTTRIGGER MODULE="REG" DETINATION="*********.reg.eventQueue">
<!--REGIF58 REGIF63 start-->
<LISTEN>

<TRIGGER>
<ENTITY>RET</ENTITY>
<EVENT>RET_POST</EVENT>
</TRIGGER>
<INTERFACE>
<IFCODE>REGIF58</IFCODE>
</INTERFACE>
<INTERFACE>
<IFCODE>REGIF63</IFCODE>
</INTERFACE>
</LISTEN>

<!--REGIF58 REGIF63 end-->

</EVENTTRIGGER>

2. 系统启动时,通过EventTriggerRegistry的static方法初始化配置文件。
利用Digester技术将配置解析成EventTriggerRegistry的实例属性,如
this.listens
    this.eventTriggers
    this.indexedListens
    this.indexedStrictlyListens
    this.indexedStrictlyListensWithModule
等等。这样,通过EventTriggerRegistry的
getListenersByEvent
getListenersByTrigger
等方法可以知道,对于某种entity,entitycode是否配置了监听器。

3.在业务方法中,通过emgr工具类来进行entity的持久化。
通过分析业务需求,如果需要发送消息,则设置emgr.context.eventCode属性。
这样emgr在持久化的处理中,会根据设置的emgr.context.eventCode属性自动的进行判断是否对于这种entity的这种entitycode进行了监听。如果是,则发送消息,如果没有,则不发送。

4.利用spring,配置各个模块的jms监听器。
监听器持有一个servicecollection,
该servicecollection的Map<key,bean>属性service包含了配置的所有实际监听bean。
<REGIF63,REGIF63>
<REGIF62,REGIF62>
通过单例的EventTriggerRegistry,取得key,(即第一步配置的<IFCODE>REGIF63</IFCODE>),进而取得bean,然后invoke该bean的excute方法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics