2016-07-11 2 views
2

Я пытаюсь синхронизировать три микросервиса, которые у меня есть.RabbitMQ - лучшая практика

Для этого я внедрил RabbitMQ. Кажется, что сейчас все работает, но я не уверен, что я следую лучшей практике, и я не мог найти ссылку, чтобы посмотреть ее, может быть, кто-то может мне помочь?

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

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

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

Вопрос Должен ли я установить другую очередь для каждого типа события, или я должен отправлять сообщения на одной и той же очереди и фильтровать их? Является ли использование описанного выше RabbitMQ правильным решением проблемы. Что такое лучшая практика?

ответ

1

Ваши настройки верны.

Одно общее правило при проектировании очередей у ​​кроликов - одна очередь для одного типа (тип здесь означает различную логику обработки) потребителей. Итак, поскольку у вас есть два типа потребителей. У них разная логика для разных типов событий (сохранение/удаление), одна очередь для каждого точно верна.

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

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

+0

Благодарим вас за ответ! Я столкнулся с новой проблемой, если я не могу использовать сообщение, и я не понимаю его. Этот процесс не пытается и потребляет сообщение снова. Он никогда не переходит в состояние готовности в очереди, но он все еще находится в очереди. Любые предложения по его решению? – straiker2

+0

вы должны попытаться поймать логику потребления, если есть какое-либо исключение, и вы уверены, что следующая попытка может быть успешной, вы можете отправить nack, чтобы вернуть сообщение в очередь, проверьте эту ссылку: http://stackoverflow.com/questions/28794123/Ack или NACK-в-RabbitMQ; и если вы уверены, что повторная попытка будет по-прежнему терпеть неудачу (на основе пойманного исключения), вы все равно должны отправить ack, а также запишите свое исключение для дальнейшего анализа. –

Смежные вопросы