Ich verwende spring-cloud-aws 's SqsListener, um AWS SNS HTTP-Benachrichtigungen in JSON Format von AWS Simple Queue Service (SQS) zu erhalten. Verwenden von SqsListener mit SNS und SQS
Dies ist der Code für den Hörer:
@SqsListener(value = "my-queue", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void handle(final MyObject obj) throws Exception {
// ...
}
Die Dokumentation oben verlinkten ist nur über das Senden und Ebene serialisiert Objekte in die Queue zu lesen und ich dachte, dass der Empfang von SNS-Nachrichten erwartet wird, aus dem Kasten heraus arbeiten . Aber ich am Ende Empfang Konvertierungsfehler:
10: 45: 51,480 [simpleMessageListenerContainer-2] ERROR o.s.c.a.m.l.SimpleMessageListenerContainer - Ausnahme auf beim Verarbeiten der Nachricht. org.springframework.messaging.MessagingException: Beim Aufrufen der Handler-Methode ist eine Ausnahme aufgetreten; verschachtelte Ausnahme ist org.springframework.messaging.converter.MessageConversionException: Nein Konverter zur Umwandlung in der Klasse com.myproject.model.MyObject gefunden, message = GenericMessage
Ich versuchte auch ein Wrapper-Objekt erstellen, die wie folgt aussehen das erwartete SNS Json Format oben verlinkt, aber ich bekomme immer die selbe Ausnahme. Der einzige Typ, der funktioniert, ist ein String in der Signatur. Sollte der SNS nicht automatisch konvertiert werden?
Wie können Sie Objekte als Strings von SQS empfangen? Stimmt es, dass SQS nur Strings als Nachrichten unterstützt? – jtcotton63
@ jtcotton63 ist es wahr. Die Payload kommt als 'String' - ein JSON-Objekt - die' @ NotificationMessage' ruft einen Konverter auf, der die Payload in ein Objekt der gewünschten Klasse konvertiert. – msparer