使用esper
或nesper
我可以直接从运行时发出事件:
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
,这样我每次都不必查询它?
答案 0 :(得分:0)
与往常一样,优秀的esper
文档有我想要的答案:
从docs他们讨论了类似EventSender
的好处:
此工具可以减少事件对象反射和类型查找的开销,因为事件发送方始终与单个具体事件类型相关联。
对于由Java类(JavaBean事件)支持的事件,事件发送方确保事件对象等于基础类,或者实现或扩展给定事件类型名称的基础类。
所以看起来答案是使用自定义事件可以为您提供类型安全性,并可能获得一些性能提升,因为运行时无需打破反射以确定正在推送的事件类型。