Ich bin in der Lage, eine Warteschlange zu mehreren Börsen mit der RabbitListener Annotation zu binden, aber bisher waren nicht erfolgreich.RabbitListener Binding Queue an mehrere Börsen
Was ich jetzt habe, ist:
@RabbitListener(bindings = @QueueBinding(value =
@Queue(
value = "${subscriber.queueInbound}", durable = "true", autoDelete = "false", exclusive = "false"),
exchange = @Exchange(value = "all", durable = "true")
),
containerFactory = "subscriberRabbitListenerContainerFactory"
)
public void onMessage(Message message, Channel channel) {
// do something
}
Dies wird auf die Start/Wieder connect Auto die Warteschlange als subscriber.queueInbound
und binden diese Warteschlange auf einen Standard all
Austausch definiert erstellen.
Ich habe dann einen Job, der im Hintergrund ausgeführt wird, der dann diese Warteschlange ordnungsgemäß konfiguriert und an die verschiedenen Vermittlungsstellen bindet, für die sie konfiguriert werden muss.
Ich suche nach einer eleganteren Art, dies entweder durch die @RabbitListener
zu tun oder irgendwie zu justieren, so dass es bei erneuter Verbindung die Warteschlange entsprechend vor dem erneuten Anhören konfigurieren muss.
Ursprünglich habe ich die Queue-Konfiguration über Beans gemacht, aber dies verhinderte den Start der Anwendung, wenn RabbitMQ nicht verfügbar war, aber ich würde es starten und die Warteschlangenkonfigurationsschritte nicht ausführen.
Ja, ich erkannte meinen Fehler und arbeite daran, es zu korrigieren, jedoch sollte der Austausch, den ich konfiguriere, klarer werden, da er von einer Konfigurationsdatei kommt, so dass ich nicht weiß, wie viele '@ QueueBinding' Setup bis zur Laufzeit. – Welsh
Dann kann es nicht mit der Anmerkung gemacht werden; während die einfachere Eigenschaft 'queues' SpEL verwenden kann, um eine' String [] ', z. '# {'$ {some.prop}'. split (',')}' Die '@ QueueBinding' Annotation ist zu komplex, um so etwas zu implementieren. –