Bindung der Wiederholungswarteschlange an den RabbitMQ-AustauschJava

Java-Forum
Anonymous
 Bindung der Wiederholungswarteschlange an den RabbitMQ-Austausch

Post by Anonymous »

Mit Spring-Boot mit RabbitMQ versuche ich einen Austausch zu erstellen, der n Warteschlangen haben kann, eine für jeden der Mikrodienste, damit jeder von ihnen die gleiche Nachricht erhält.

Für den Producer-Mikrodienst ist ein Fanout-Austausch definiert.
Jeder Verbraucher-Mikrodienst erstellt eine Warteschlange und versucht, sie mit dem Producer-Austausch zu verbinden.

Wenn Producer zum ersten Mal gestartet wird, ist der Austausch erstellt. Start-Consumer-Microservices binden an die Producer-Börse. Wenn Consumer-Microservices jedoch zuerst gestartet werden, erfolgt keine Bindung, da noch nichts zum Binden vorhanden ist und dieses Protokoll angezeigt wird:

Code: Select all

2020-01-13 22:24:49.640  INFO [,,,] 88649 --- [           main] o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [localhost:5672]
2020-01-13 22:24:49.685  INFO [,,,] 88649 --- [           main] o.s.a.r.c.CachingConnectionFactory       : Created new connection: rabbitConnectionFactory#7746ae18:0/SimpleConnection@428ea503 [delegate=amqp://[email protected]:5672/, localPort= 62282]
2020-01-13 22:24:49.726 ERROR [,,,] 88649 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory       : Channel shutdown: channel error; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no exchange 'abc-exchange' in vhost '/', class-id=50, method-id=20)
2020-01-13 22:24:50.748 ERROR [,,,] 88649 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory       : Channel shutdown: channel error; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no exchange 'abc-exchange' in vhost '/', class-id=50, method-id=20)
2020-01-13 22:24:52.754 ERROR [,,,] 88649 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory       : Channel shutdown: channel error; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no exchange 'abc-exchange' in vhost '/', class-id=50, method-id=20)
2020-01-13 22:24:56.763 ERROR [,,,] 88649 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory       : Channel shutdown: channel error; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no exchange 'abc-exchange' in vhost '/', class-id=50, method-id=20)
2020-01-13 22:25:01.794 ERROR [,,,] 88649 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory       : Channel shutdown: channel error; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no exchange 'abc-exchange' in vhost '/', class-id=50, method-id=20)
2020-01-13 22:25:01.807  INFO [,,,] 88649 --- [           main] o.s.a.r.l.SimpleMessageListenerContainer : Broker not available; cannot force queue declarations during start: java.io.IOException
2020-01-13 22:25:01.859 DEBUG [,,,] 88649 --- [           main] .b.c.i.c.AppConfig$CustomHttpTraceFilter : Filter 'httpTraceFilter' configured for use
Wie kann ich Consumer-Microservices (oder Producer) so konfigurieren, dass sie versuchen, die Warteschlangen an den Producer-Austausch zu binden, auch wenn sie gestartet wurden, bevor der Austausch existierte?

Ein anderer Ansatz wäre, dass Producer die Warteschlangen dynamisch basierend auf den Startinformationen des Consumer-Microservices erstellt, die dann eine bestimmte Warteschlange abhören. Das Problem wäre jedoch weiterhin bestehen, wenn die Warteschlange nicht schnell genug erstellt wird oder der Verbraucher vor dem Produzenten erstellt wird, löst der Listener eine Ausnahme aus

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post