MassTransit / RabbitMQ Отправить вопрос против публикации и ошибки <> - PullRequest
0 голосов
/ 11 октября 2018

У меня есть 2 приложения, которые называются appA и appB.Они соответственно имеют aQueue и bQueue, что оба приложения имеют ReceiveEndpoint.Оба приложения используют один и тот же хост на RabbitMQ.

appA отправляет команду CreateEntityCommand в appB, в bQueue, с методом bus.Send.

В appB у меня есть потребитель, который потребляетCreateEntityCommand.

** пока все хорошо **

Вопрос № 1: Если мой потребитель appB успешно создал сущность, я публикую EntityCreatedEvent.Мой потребитель EntityCreatedEvent в appA понял это правильно, но событие также добавлено в bQueue_skipped, почему?

Вопрос # 2: Теперь, если у моего потребителя appB есть исключение, мой appA должен быть уведомлен.Ошибка генерируется в bQueue.Я хотел бы, чтобы мое appA использовало ошибку, но ошибка автоматически появляется на bQueue.Если я добавлю ReceiveEndpoint в appA в список bQueue, я получу много dead_letter (пропущенная очередь).

1 Ответ

0 голосов
/ 11 октября 2018

Как правило, если ваши сообщения попадают в очередь недоставленных сообщений (пропущенные), это означает, что существует связь между обменом типами сообщений и обменом очередями, но у вашей конечной точки нет получателя для данного сообщения.Тип.

Обычно это происходит, когда у вас был потребитель, а затем его удалили.MassTransit не удалит привязку за вас, но он также не будет знать, как обрабатывать поступающие сообщения.

Вы можете удалить устаревшую привязку, перейдя в пользовательский интерфейс управления RMQ, выполнив следующие действия:

  • Открыть очередь конечных точек
  • Нажмите на привязки, там есть только одна, указывающая на обмен конечной точки
  • Перейдите по ссылке, чтобы открыть обмен конечной точкой и увидеть привязкидля обмена типами сообщений
  • Там вы можете удалить те привязки, которые вам больше не нужны

Если у вас нет сообщений в очереди, вы также можете просто удалить их, и MassTransit создаствсе для тебя, с нуля.

...