2014-11-04 21 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()); 
    } 

}