Ich bin bestrebt, auf die neueste Frühjahr Cloud/Datenfluss/Stream-Release aktualisieren, um die jüngste Ergänzung der Möglichkeit zu erhalten, die Zustellungsmodus Persistenz auf Nachrichten, die am Ende geben in einem Datenfluss-Strom tot-beschriftet sein.DLX (rabbitmq) Routing-Schlüssel Problem mit Spring Cloud-Datenfluss
Ich versuchte die neueste Dalston.SR1-Version und festgestellt, dass Nachrichten am Ende zu den Datenfluss dlq weitergeleitet und als persistent markiert wurden, aber nur wenn die App (z. B. ein Prozessor) standalone ausgeführt wurde.
Wenn die App als Teil eines Datenfluss-Streams ausgeführt wird, werden keine Nachrichten in eine der Dead-Letter-Warteschlangen im Datenfluss-Stream geschrieben. Das Aktivieren der Ablaufprotokollierung für den Frühling amqp zeigte, dass dies auf den falschen Routingschlüssel zurückzuführen war.
Was ich in den Protokollen zu sehen, ist dies:
o.s.amqp.rabbit.core.RabbitTemplate : Publishing message on exchange [DLX], routingKey = [mystreamname]
Dies wie ein Bug scheint: der Stream-Name jetzt als Routing-Schlüssel in einer Datenfluß Umgebung während Standalone verwendet wird und zuvor in Datenfluß, es basiert auf dem Warteschlangennamen.
Wurde die rabbitmq Binder-Konfiguration jetzt geändert? Hier ist ein Ausschnitt aus meinem Binder Config für einen Prozessor (nehmen spring.cloud.stream Präfix):
bindings:
input:
consumer:
backOffMultiplier: 1
maxAttempts: 1
group: mygroup
rabbit:
bindings:
input:
consumer:
autoBindDlq: true
durableSubscription: true
republishToDlq: true
content-type: application/json
output:
producer:
autoBindDlq: true
content-type: application/json
Dies funktioniert gut in der Produktion mit Camden.SR6 und Datenfluß 1.1.4.RELEASE (abgesehen von den dlq Beharrlichkeit fehlt).
Mache ich etwas falsch, oder gibt es einen Routing-Key-Bug?
Der DeadLetterRoutingKey weist die Routing-Schlüssel in rabbitmq zu, aber die Nachrichtenwiederherstellung verwendet immer noch den Stream-Namen. Ich werde später ein Problem ansprechen. – bikerlad