我尝试使用以下代码发送事件,但在注册的侦听器中继续接收它两次。在监听器注册中查询可能有问题还是我犯了其他错误? 谢谢你的任何建议!
System.out.println("test1");
TestEvent event = new TestEvent(foo);
System.out.println("test 1.5");
epService.getEPRuntime().sendEvent(event);
System.out.println("test2");
听众功能
public void update(EventBean[] newEvents, EventBean[] oldEvents) {
LOG.info("TestEvent detected!");
System.out.println("hallo");
}
日志文件如下所示:
test1
test 1.5
INFO - TestEvent detected!
hello
INFO - TestEvent detected!
hello
test2
听众注册:
// Register listener
EPStatement stmt = this.getEPServiceProvider().getEPAdministrator().createEPL("select * from TestEvent");
stmt.addListener(new TestEventListener());
答案 0 :(得分:0)
我会在黑暗中刺伤......
我只是在做单元测试之类的事情时才发现这种情况,我重复使用引擎而忘记删除监听器。
如果第二个单元测试对侦听器使用相同的处理程序,则会被调用两次。
除此之外,评论可能是正确的,您需要发布您的代码,因为这不太可能是esper
中的错误。
答案 1 :(得分:0)
另一个可能的原因是:
EPStatement statement = admin.createEPL(create window
TestEventWindow.win:time(1 day) (...));
statement.addListener(TestEventListener());
EPStatement stmt = admin.createEPL("select * from TestEventWindow");
stmt.addListener(new TestEventListener());
当新事件到达或TestEventWindow
中的属性发生变化时,update()
将被调用两次。