在最小负载下不接收Apache Camel事件通知

时间:2016-12-07 14:21:41

标签: events apache-camel

我扩展了EventNotiferSupport,并设置isEnable()以响应所有事件的True。我有一个notify(),它记录我收到的事件以及事件的相应Exchange ID。

我已使用this.context.getManagementStrategy()添加了我的ExchangeMes​​sageNotifier。addEventNotifier(this.exchangeMes​​sageNotifier);

我在基本没有负载的情况下运行我的程序,一次发送1条消息,消息之间有1秒延迟进入Camel发送出去。一切都按我期望的方式运作。我收到的活动一切都很好看。

我将消息之间的延迟减少到0毫秒,我发现大约20条消息中有1条未能收到其中一条事件(通常是已完成的事件)。

添加第二个以相同速率发送的线程,我不会收到任何消息的任何事件。

我错过了什么?我已完成搜索,但我找不到任何需要做的事情。有什么我想念的吗?

我正在使用Apache Camel 2.16.3,并且转移到2.18.1仍然看到相同的行为。

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()中设置的所选组中确定是否需要特定事件。

一旦发生这些变化,我就会收到一致的事件。