使用自定义事件发送方与运行时发送方相比是否有优势

时间:2013-06-05 18:47:37

标签: esper nesper

使用espernesper我可以直接从运行时发出事件:

EPRuntime runtime = provider.getEPRuntime();
MyCustomEvent e = new MyCustomEvent("foo");
runtime.sendEvent(order);

或者我可以像这样使用自定义事件发件人:

EventSender sender = epService.EPRuntime.GetEventSender("MyCustomEvent");
MyCustomEvent e = new MyCustomEvent("foo");
sender.SendEvent(e);

我试过这个时间,看起来自定义事件发送者可能会更快,但它似乎并没有真正与我所看到的产生巨大的性能差异。

是否有令人信服的理由选择一种方法而不是另一种?

如果我使用自定义EventSender的第二种方法,是否可以安全地缓存从运行时获取的EventSender,这样我每次都不必查询它?

1 个答案:

答案 0 :(得分:0)

与往常一样,优秀的esper文档有我想要的答案:

docs他们讨论了类似EventSender的好处:

  

此工具可以减少事件对象反射和类型查找的开销,因为事件发送方始终与单个具体事件类型相关联。

     

对于由Java类(JavaBean事件)支持的事件,事件发送方确保事件对象等于基础类,或者实现或扩展给定事件类型名称的基础类。

所以看起来答案是使用自定义事件可以为您提供类型安全性,并可能获得一些性能提升,因为运行时无需打破反射以确定正在推送的事件类型。