Was ist der früheste Eintrittspunkt, um eine Hasenbotschaft im Frühling-amqp zu lesen?

8

Ich speichere lokale Thread-Nachrichtendaten in einem MDC. Ich möchte das alte löschen und neue Kontextdaten für eine eingehende Kaninchen-Nachricht hinzufügen, wie das Lesen bestimmter Werte aus den Headern oder das Lesen der Nutzdaten der Kaninchen-Nachricht als byte[] . Leider sehe ich oft Ausnahmen, bevor die Nachricht meine mit @RabbitHandler annotierten Methoden trifft. Gibt es einen früheren Einstiegspunkt, an den ich mich anschließen kann, um diesen Kontext zu etablieren? Ich weiß nicht, was vor der Deserialisierung passiert, aber im Idealfall möchte ich auf die Nachricht zugreifen, bevor ich versuche, sie zu deserialisieren. Vielleicht gibt es irgendwo eine onMessageReceived(byte[] message, Map headers) Methode. Je früher im Call Stack, desto besser.

    
kinbiko 18.01.2018, 09:53
quelle

2 Antworten

2

Das @RabbitHandler wird von AbstractRabbitListenerContainerFactory aufgefüllt, das mit dem benutzerdefinierten MessageConverter geliefert werden kann: Ссылка . Sein fromMessage() wird von MessagingMessageListenerAdapter.toMessagingMessage() aufgerufen. Und das ist in MessagingMessageListenerAdapter.onMessage() gemacht. Das ist in der Tat sehr früh Platz, den Sie haken können. Und Sie haben wirklich noch ein rohe org.springframework.amqp.core.Message -Objekt ohne Konvertierung und mit allen verfügbaren Kopfzeilen und Eigenschaften.

Nun, Sie können auch injizieren:

%Vor%

Aus ähnlichen Gründen bitten Sie.

    
Artem Bilan 18.01.2018, 14:05
quelle
0

Eine Lösung besteht darin, eine SimpleMessageListenerContainer anstelle von @RabbitHandler Annotationen zu verwenden und einen benutzerdefinierten Message Listener Adapter zu verwenden.

Beispiel:

%Vor%     
ESala 18.01.2018 14:06
quelle