Esper:事件被发送两次?

时间:2014-06-04 23:10:58

标签: java esper complex-event-processing

我尝试使用以下代码发送事件,但在注册的侦听器中继续接收它两次。在监听器注册中查询可能有问题还是我犯了其他错误? 谢谢你的任何建议!

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());

2 个答案:

答案 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()将被调用两次。