Я использую RabbitMQ для координации событий между коллекциями служб следующим образом:
Диспетчер пользователей
- испускает
user.collect
, когда он хочет, чтобы пользовательские данные собирались изотдельный сервис - прослушивает
user.collected
, который испускается отдельным сервисом
User Collector
- прослушивает
user.collect
, когда предполагаетсясобирать некоторые пользовательские данные, и - испускает
user.collected
при сборе данных.
Существуют также другие службы, которые прослушивают такие события, как
user.created
, user.updated
, user.deleted
Кроме того, существуют службы, которые прослушивают более общие события, такие как
и т. Д.
Поэтому я использую topic
обмен.
Моя установка выглядит следующим образом:
| exchange | type | queue | routingKey |
| -------- | ----- | --------------- | -------------- |
| MY_APP | topic | USER_COLLECTION | user.collect |
| MY_APP | topic | USER_COLLECTION | user.collected |
Все службы взаимодействуют с биржей, называемой MY_APP
.
. Диспетчер пользователей создает производителя, который генерирует событие user.collect
.на MY_APP
обмен с routingKey
user.collect
, и он создает получателя, который прослушивает в очереди USER_COLLECTION
события с routingKey user.collected
.
Пользовательский сборщик создает источника, который испускаетuser.collected
событие для обмена MY_APP
с routingKey user.collected
, и оно создает получателя, который прослушивает в очереди USER_COLLECTION
события с routingKey user.collect
.
Однако я обнаружил, что пользовательДиспетчер испускает user.collect
, и диспетчер пользователей подхватывает его для прослушивателя user.collected
.
Это так, как будто routingKey игнорируется.Что я делаю не так?
Обновление
См. Контрольный вопрос