建议在Jdon框架的事件消费者中实现:
@Component public class ShortMessageHandler {
protected final ShortMessageFactory factory;
private AsyncEventBus eventBus;
public ShortMessageHandler(ShortMessageFactory factory, ScheduledExecutorUtil scheduledExecutorUtil) { super(); this.factory = factory; eventBus = new AsyncEventBus(scheduledExecutorUtil.getScheduExec()); eventBus.register(this); }
@OnEvent("atUserNotifiedEvent") //这是Jdon的事件响应器 public void notifyATUser(ATUserNotifiedEvent event) throws Exception { eventBus.post(event);
}
@Subscribe //这是Guava的事件响应器 public void notifyATUserAction(ATUserNotifiedEvent event) throws Exception { factory.createWeiBoShortMessage(event);
}
}
|
以上是一个事件消费者的普通组件的代码,执行顺序是:先并发执行notifyATUser方法,然后异步线程的方式执行notifyATUserAction,这两者区别是:前者并发不管当前CPU负载情况,马上执行,后者使用的JDK Executor重启一个线程执行,如果当前CPU高,可能会推迟执行。
事件发送者代码如下:
@Introduce("message") public class ShortMPublisherRole {
@Send("atUserNotifiedEvent") public DomainMessage notifyATUser(ATUserNotifiedEvent event) { return new DomainMessage(event); } }
|
领域模型中要使用这个事件发送者,只要在代码中加入:
public class MyModel{ @inject ShortMPublisherRole shortMPublisherRole;
}
|
这是通过Jdon框架提供的领域事件再使用eventbus。执行顺序是:
MyModel --->发出事件 --- >ShortMPublisherRole --->ShortMessageHandler的OnEvent--->ShortMessageHandler的Guava的Subscribe
如果想在模型中直接使用Guava,那么如同普通POJO一样,在构造函数中注册:
public class MyModel{ EventBus eventBus; public MyModel (){ eventBus = new EventBus(); eventBus.register(new ShortMessageHandler()) } }
|
[该贴被banq于2013-03-26 17:28修改过]