Повторить привязку очереди к обмену RabbitMQ - PullRequest
0 голосов
/ 14 января 2020

Использование Spring-Boot с RabbitMQ Я пытаюсь создать обмен, который может иметь n-количество очередей, по одной для каждого из микросервисов, чтобы каждое из них получало одно и то же сообщение.

Производитель микросервиса определен Fanout Exchange. Каждый микросервис Consumer создает очередь и пытается подключить ее к обмену Producer

Когда сначала запускается Producer, создается обмен. Стартовые потребительские микросервисы привязываются к бирже производителей. Однако в случае, когда микросервисы Consumer запускаются первыми, они не будут связываться, так как пока нечего связывать с предоставлением этого журнала:

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://guest@127.0.0.1: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<channel.close>(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<channel.close>(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<channel.close>(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<channel.close>(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<channel.close>(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

Как настроить микросервисы Consumer (или производителя), чтобы попытаться связать очереди к обмену Producer, даже если они были запущены до того, как обмен существовал.

Другой подход - это создание Producer динамически на основе информации о начальных микросервисах потребителя, которая затем будет прослушивать данную очередь. Однако проблема все еще будет существовать, если очередь не будет создана достаточно быстро или Consumer будет создан до Producer, тогда слушатель выдаст исключение

1 Ответ

0 голосов
/ 14 января 2020

Разве мы не можем указать обязательный компонент в вашем потребительском приложении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...