针对Apache骆驼的自定义事件通知程序不适用于交流事件

时间:2019-02-04 15:43:50

标签: spring-boot apache-camel

我有一个实现骆驼路由服务的spring-boot应用程序。我想知道使用者队列是否存在(因为这些队列不在我的系统中)。我实现了一个事件通知程序,以了解交换是否发送了触发的事件。但是我对事件通知程序的自定义实现无法正常工作。我可以在日志中看到何时触发了骆驼上下文事件,仅此而已。事件通知程序不会捕获其他事件。 谢谢。

这是五月事件通知程序类:

@Component
public class MyLoggingSentEventNotifer extends EventNotifierSupport {
private static final Logger logger =    LoggerFactory.getLogger(MyLoggingSentEventNotifer.class);
@Override
public void notify(final EventObject event) throws Exception {
  if (event instanceof CamelContextStartedEvent) {
  }

  if (event instanceof ExchangeSentEvent) {
     final ExchangeSentEvent sent = (ExchangeSentEvent) event;
     log.info("Took {} millis to send to: {}", sent.getTimeTaken(), sent.getEndpoint());
  }

  if (event instanceof ExchangeCreatedEvent) {
     final ExchangeSendingEvent sending = (ExchangeSendingEvent) event;
     log.info("Sending to to: {}", sending.getEndpoint());
  }
}
@Override
public boolean isEnabled(final EventObject event) {
  if (event instanceof CamelContextStartedEvent) {
     return true;
  }
  return false;
}
}

1 个答案:

答案 0 :(得分:1)

问题出在您的isEnabled方法上,您应该在其中过滤要接受的事件。并且在您的代码中,您仅接受骆驼上下文启动事件,因此您只能得到它。相反,要么针对所有事件返回true,要么过滤您只想要的事件。