2014-11-04 3 views
0

Для выполнения измерения производительности и ведения аудита на Camel, AuditEventNotifer реализуется, как показано ниже. Однако каждое событие регистрируется дважды. Например, событие завершения сообщения регистрируется дважды. Может ли кто-нибудь дать мне подсказки о том, как решить проблему?Camel EventNotifierSupport производит дублированный вывод

Route Определение

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

Проверьте, не активирован ли компонент уведомлений дважды. Если класс помечается @Component, то компонент должен не быть определен в конфигурации Spring XML:

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

Выберите один или другую возможность, но не оба.

+0

@LewisWong Я заменил свой старый ответ на этот вопрос. Пожалуйста, проверьте его, если он решает вашу проблему. –

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()); 
    } 

} 
Смежные вопросы