2016-12-07 1 views
0

Ich habe EventNotiferSupport erweitert und iEnable() auf True für alle Ereignisse eingestellt. Ich habe eine notify(), die protokolliert, welche Ereignisse ich erhalte und die entsprechende Exchange-ID für das Ereignis.Keine Apache Camel Ereignisbenachrichtigungen unter der kleinsten Auslastung empfangen

Ich habe meinen ExchangeMessageNotifier mit this.context.getManagementStrategy() hinzugefügt. AddEventNotifier (this.exchangeMessageNotifier);

Ich laufe mein Programm unter im Wesentlichen keine Last, Senden 1 Nachricht zu einer Zeit 1 Sekunde Verzögerung zwischen Nachrichten in Camel zu senden. Alles funktioniert so, wie ich es erwarte. Ich erhalte meine Veranstaltungen, alles sieht gut aus.

Ich verringere die Verzögerung zwischen Nachrichten auf 0 Millisekunden, und ich finde, dass 1 von ungefähr 20 Nachrichten ich eines der Ereignisse nicht erhalte (oft das Completed-Ereignis).

Fügen Sie einen zweiten Thread mit der gleichen Rate senden, und ich bekomme keine Ereignisse für keine Nachrichten.

Was fehlt mir? Ich habe Suchen durchgeführt und finde nichts, was ich anders machen müsste. Gibt es etwas, das mir fehlt?

Ich benutze Apache Camel 2.16.3, und bewegte sich nach 2.18.1 immer noch das gleiche Verhalten.

+0

ich folgende bin Einstellung für Ereignisse behandeln zu: '@Override protected void doStart() throws Exception { this.setIgnoreCamelContextEvents (true); this.setIgnoreExchangeCompletedEvent (false); this.setIgnoreExchangeCreatedEvent (false); this.setIgnoreExchangeFailedEvents (false); this.setIgnoreExchangeRedeliveryEvents (false); this.setIgnoreExchangeSentEvents (false); this.setIgnoreRouteEvents (Wahr); this.setIgnoreServiceEvents (Wahr); } ' – GhostProgrammer

+0

Ich füge diese Klasse als eine Bohne in Blueprint hinzu. Nachdem Sie die gewünschten Ereignisse aktiviert haben, sollten Sie die Ereignisse in Ihren Protokollen sehen. –

Antwort

0

Gut gefunden meine eigene Antwort. Ein Teil des Spaßes, Code ohne irgendwelche Informationen zu erben.

In Ihrer Implementierung des EventNotifierSupport müssen Sie die Methode doStart() überschreiben und den EventNotifierSupport für die Ereignisse konfigurieren, die Sie empfangen möchten.

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

Dies ist zusätzlich folgendes zu tun:

public boolean isEnabled(EventObject event) { 
    return true; 
} 

Was Sie, wenn Sie ein bestimmtes Ereignis, Sie in der doStart() gesetzt hatte, aus den ausgewählten Gruppen wollen feststellen können.

Sobald diese Änderungen in waren, erhielt ich konsistente Ereignisse.