2014-11-04 23 views
0

为了在Camel上执行性能测量和审计日志记录,AuditEventNotifer的实现如下。但是,每个事件都记录了两次。例如,消息完成事件被记录两次。有人能给我提示如何解决这个问题吗?Camel EventNotifierSupport产生重复输出

路线定义

from(INBOUND_ENDPOINT).filter(header("foo").isEqualTo("bar")).to(
       "mock:result"); 

AuditEventNotifer实施

@Component 
public class AuditEventNotifer extends EventNotifierSupport { 

    private static final Logger LOGGER = LoggerFactory 
      .getLogger(AuditEventNotifer.class); 

    @Override 
    public void notify(EventObject event) throws Exception { 

     LOGGER.info(event.toString()); 
    } 

下面是原木生产

15:29:12.497 [thread #0 - JmsConsumer[ticket_queue]] INFO AuditEventNotifer:19 - exchange completed: Exchange[JmsMessage[JmsMessageID: ID:fe80:0:0:0:be30:5bff:feee:6a24%em1a48e14979b5068a0:31140]] 
15:29:12.497 [thread #0 - JmsConsumer[ticket_queue]] INFO AuditEventNotifer:19 - exchange completed: Exchange[JmsMessage[JmsMessageID: ID:fe80:0:0:0:be30:5bff:feee:6a24%em1a48e14979b5068a0:31140]] 
15:29:12.497 [thread #0 - JmsConsumer[ticket_queue]] INFO AuditEventNotifer:19 - exchange completed: Exchange[JmsMessage[JmsMessageID: ID:fe80:0:0:0:be30:5bff:feee:6a24%em1a48e14979b5068a0:31141]] 
15:29:12.497 [thread #0 - JmsConsumer[ticket_queue]] INFO AuditEventNotifer:19 - exchange completed: Exchange[JmsMessage[JmsMessageID: ID:fe80:0:0:0:be30:5bff:feee:6a24%em1a48e14979b5068a0:31141]] 
15:29:12.498 [thread #0 - JmsConsumer[ticket_queue]] INFO AuditEventNotifer:19 - exchange completed: Exchange[JmsMessage[JmsMessageID: ID:fe80:0:0:0:be30:5bff:feee:6a24%em1a48e14979b5068a0:31142]] 
15:29:12.498 [thread #0 - JmsConsumer[ticket_queue]] INFO AuditEventNotifer:19 - exchange completed: Exchange[JmsMessage[JmsMessageID: ID:fe80:0:0:0:be30:5bff:feee:6a24%em1a48e14979b5068a0:31142]] 
15:29:12.498 [thread #0 - JmsConsumer[ticket_queue]] INFO AuditEventNotifer:19 - exchange completed: Exchange[JmsMessage[JmsMessageID: ID:fe80:0:0:0:be30:5bff:feee:6a24%em1a48e14979b5068a0:31143]] 
15:29:12.498 [thread #0 - JmsConsumer[ticket_queue]] INFO AuditEventNotifer:19 - exchange completed: Exchange[JmsMessage[JmsMessageID: ID:fe80:0:0:0:be30:5bff:feee:6a24%em1a48e14979b5068a0:31143]] 

回答

0

检查通知程序bean是否未配置两次。如果类与@Component注释,那么bean必须可以在Spring XML配置定义:

<bean id="auditEventNotifier" class="your.package.AuditEventNotifer" />

选择一种或另一种可能性,但不能同时使用。

+0

@LewisWong我用这个替换了我原来的答案。请检查它,如果它解决了你的问题。 – 2014-11-07 08:52:04

0

既然你没有覆盖的

public boolean isEnabled(EventObject event) 

它输出事件的每个状态的消息。例如:如果您希望消息在发送时只打印一次,请检查下面的代码块。

@Component 
public class AuditEventNotifer extends EventNotifierSupport { 

    private static final Logger LOGGER = LoggerFactory 
      .getLogger(AuditEventNotifer.class); 

    @Override 
    public boolean isEnabled(EventObject event) { 
     return event instanceof ExchangeSentEvent; 
    } 
    @Override 
    public void notify(EventObject event) throws Exception { 

     LOGGER.info(event.toString()); 
    } 

}