Мне трудно понять, как RabbitMQ и Spring Cloud Stream работают вместе.Что я хочу сделать, это следующее (Базовое объяснение):
У меня есть производитель, который создает сообщения, такие как: SendEmail, ReceiveEmail и ErrorOccurred.Они пойдут на шину сообщений.Тогда у меня есть 3 потребителя.A LogService
, Emailservice
и ParserService
.
EmailService
получат все сообщения Email
, LogService
получит ErrorOccurred
(также сгенерированный другими производителями)и сообщения EmailSend
.Наконец, ParserService
будет получать только сообщения ReceiveEmail
.
Кажется, я не могу настроить это с помощью Spring Cloud Stream.Я могу отправлять и получать одно событие от одного производителя одному получателю и одного производителя нескольким подписчикам (одна тема, несколько очередей, но без подстановочных знаков).
spring:
rabbitmq:
host: localhost
username: guest
password: guest
cloud:
stream:
bindings:
output: # <-- Question 1
destination: # <-- Question 2
Со стандартной привязкой интерфейса Source.class
.
И EmailService
:
spring:
rabbitmq:
host: localhost
username: guest
password: guest
cloud:
stream:
bindings:
input:
destination: # <-- Question 3
И то же самое для LogService
, как указано выше.
Вопрос 1: Я определил только один выход, но, очевидно, мне нужно2?Но тогда я не могу использовать «вход» в качестве названия канала, верно?И мне нужно настроить мои собственные имена каналов с Output("CHANNEL NAME HERE")
.Но что означает название этого канала?Я не вижу, чтобы название канала снова появлялось в веб-интерфейсе RabbitMQ или чем-то еще.Это просто внутреннее наименование приложения?
Вопрос 2: Насколько я понял, это обменное имя.Если я правильно читаю документы, мне нужен обмен типами тем для сообщений Email
, так как у меня 3 получателя.У меня также есть 3 отдельные очереди тогда?Но как мне настроить 1 очередь, получающую только EmailReceived
, 1 очередь, получающую все и 1 очередь EmailSend
сообщений?
Вопрос 3: Нужно ли производить обмен для каждого отдельного события, которое я хочу отправить?Разве я не смогу подписаться на все email.*
события?Если я использую его таким образом, я создаю очередь с таким точным именем и тему с тем же именем.Что не так, насколько я знаю.
Я хочу сделать это так, https://www.rabbitmq.com/tutorials/tutorial-five-spring-amqp.html. Но проблема в том, что они используют базовый RabbitMQ Spring AMQP, и я решил использовать SpringCloud Stream (так как он объявлен как инструмент для организации микросервисных коммуникаций и т. Д.).
Должен ли я использовать SCS или использовать библиотеку Spring-AMQP?если так, как я должен настроить это?Если мне нужно объяснить больше, пожалуйста, попросите разъяснений.Заранее спасибо!