2016-12-13 5 views
2

ich erstellt habe mit dem RabbitMQ Web-UI ein Thema Austausch TX und binden an den Austausch zwei Warteschlangen TX.Q1 und TX.Q2, die jeweils gebunden mit Routing-Tasten rk1 und rk2 entsprechend, und produzierte wenige Nachrichten an den Austausch.Bind RabbitMQ Verbraucher mit Spring Cloud-Stream einer bestehenden Warteschlange

Jetzt möchte ich einen Verbraucher mit Spring Cloud Stream erstellen, die nur Nachrichten von Q1 nehmen wird. Ich versuchte Konfiguration mit:

spring.cloud.stream.bindings.input.destination=TX 
spring.cloud.stream.bindings.input.group=Q1 

und die Anmerkung @StreamListner(Sink.INPUT) für die Methode, die Nachrichten verbraucht.

Als Ergebnis kann ich sehen, dass der Verbraucher eine Warteschlange (oder Bindung) mit dem gleichen Namen TX.Q1 erstellt hat, aber der Routing-Key der neuen Queue/bind ist #.
Wie kann ich über Spring Cloud Stream einen Consumer konfigurieren, der Nachrichten aus der vordefinierten Warteschlange konsumiert (nur das Routing mit rk1).

Antwort

2

Also für den Moment hat das Workaround, das Garry Russell vorgeschlagen hat, das Problem für mich gelöst.

Ich habe @RabbitListener statt @StreamListenet diese Art und Weise verwendet:
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "TX.Q1", durable = "true"), exchange = @Exchange(value = "TX", type = "topic", durable = "true"), key = "rk1").

Als Ergebnis der vorgegebenen Warteschlange TX.Q1 mit Bindungsschlüssel binden: RK1 zur Vermittlungs TX.

Warten auf Updates auf der .

0

Spring Cloud Stream legt den Routerschlüssel intern so fest, dass der Consumer-Endpunkt entweder der Zielname (exchange Name) selbst oder das Routing bei statischer Partitionierung partition ist.

Ich denke, this github Problem könnte für Ihren Fall relevant sein.

+0

Sie meinen also, dass mit Spring Cloud Stream ich nicht einen Verbraucher an bestimmte vordefinierte (nicht anonyme) Warteschlange binden kann, die einen Routing-Schlüssel hat? –

+0

Ja, ich denke schon. –

+1

Ich habe gerade getestet und wir fügen eine zweite Bindung hinzu; Ich denke, das ist ein Fehler - wenn die Warteschlange bereits existiert, sollten wir nicht die generische ('#' Platzhalterbindung) hinzufügen. Als Umgehung können Sie anstelle eines '@ StreamListener' einen' @ RabbitListener' verwenden (es sei denn, Sie verwenden den Stream-Listener für die Konvertierung). Ich öffnete [und veröffentliche dafür] (https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit/issues/34). –

Verwandte Themen