我扩展了EventNotiferSupport,并设置isEnable()以响应所有事件的True。我有一个notify(),它记录我收到的事件以及事件的相应Exchange ID。
我已使用this.context.getManagementStrategy()添加了我的ExchangeMessageNotifier。addEventNotifier(this.exchangeMessageNotifier);
我在基本没有负载的情况下运行我的程序,一次发送1条消息,消息之间有1秒延迟进入Camel发送出去。一切都按我期望的方式运作。我收到的活动一切都很好看。
我将消息之间的延迟减少到0毫秒,我发现大约20条消息中有1条未能收到其中一条事件(通常是已完成的事件)。
添加第二个以相同速率发送的线程,我不会收到任何消息的任何事件。
我错过了什么?我已完成搜索,但我找不到任何需要做的事情。有什么我想念的吗?
我正在使用Apache Camel 2.16.3,并且转移到2.18.1仍然看到相同的行为。
答案 0 :(得分:0)
我找到了自己的答案。在没有任何信息的情况下继承代码的部分乐趣。
在EventNotifierSupport的实现中,您需要覆盖doStart()方法并为您希望接收的事件配置EventNotifierSupport。
Application.Initialize()
这是执行以下操作的补充:
protected void doStart() throws Exception {
// filter out unwanted events
setIgnoreCamelContextEvents(true);
setIgnoreServiceEvents(true);
setIgnoreRouteEvents(true);
setIgnoreExchangeCreatedEvent(true);
setIgnoreExchangeCompletedEvent(false);
setIgnoreExchangeFailedEvents(true);
setIgnoreExchangeRedeliveryEvents(true);
setIgnoreExchangeSentEvents(false);
}
这使您可以在doStart()中设置的所选组中确定是否需要特定事件。
一旦发生这些变化,我就会收到一致的事件。