NM3000网管系统架构之一:消息推送框架简介
1、简介
传统的顺序程序设计总是按照流程来安排所有的工作,而事件机制的特点在于:等待,有事情发生则处理。这样的好处是避免了顺序程序设计在没有工作时的空循环处理,释放了各种资源。
Java事件处理采用观察者模式,即发布-订阅模式。关于该设计模式,请参照观察者模式。
2、NM3000事件机制相关接口、类介绍
2.1 监听者接口:主题和监听者之间消息传递的标准接口规范。
2.2 监听者:实现监听者接口,具体的事件执行者。
2.3 *Adapter类:适配器类,继承该类后无需实现接口中所有方法,如果需要实现方法不多,可以无需建立适配器类。
2.4 主题接口:被监听者的顶层接口.
2.5 主题:被监听者,包含监听者接口的引用,一个事件队列,两个消息发送方法。
regs:监听者接口引用map集合
map的key是监听者接口的class对象,value是该接口下的实现类对象。
eventQueue:消息对象队列
阻塞队列中存放的是EmsEventObject对象,所以继承自该对象的消息对象都可以存放到队列中。
executorService:java线程池
采用生产者-消费者模式,多线程处理消息队列。
addListener:监听者类初始化时,调用该方法,将自己添加到messageService的监听者集合中。
- addMessage:添加消息,将消息放到eventQueue中,等待执行
fireMessage:立即将消息传递给对应的监听者,即立即执行
重点:封装消息对象,设置监听该消息的接口和响应方法。
使用反射,从消息对象中获得响应方法,invoke执行,即将消息传递给指定接口的监听者。
2.6 消息对象:主题和监听者之间传递的事件描述对象。
3、NM3000事件机制的使用
- 新建*Listener接口,继承EmsListener
- 新建Adapter类,继承EmsAdapter,实现Listener接口。(可选)
- 新建Event类,继承EmsEventObject<Listener>类
一般在service层使用消息。
- 在监听者实现类(实现监听者接口)中注MessageServiceImpl类,并在initialize方法中添加Listener接口。在destroy方法中移除Listener接口。
注意:在配置*serviceImpl实现类时,需要配置初始化及销毁时方法。示例:
messageService.addListener(CmcEntityListener.class, this);
messageService.removeListener(CmcEntityListener.class, this); 在需要发送消息的地方,构建消息对象,设置监听接口及方法,调用messageService发送消息。
addMessage:将消息添加到消息缓冲队列,延迟执行
fireMessage:立即执行