2016-11-21 1 views
1

Например, я реализовал службу индексирования поиска, которая получает запросы поиска и производит ответы с использованием сообщений.Запрос/ответ службы: используете ли вы ключи маршрутизации и сохраняете сообщения в одной очереди RabbitMQ?

В настоящее время я определил очередь для епдиеих поиска просит и другой в епдиеих результатах поиска .

рефакторинга ли это просто Епдиеие к уникальной очереди, в которой сообщения имеют запрос и ответключи маршрутизации? Или это чрезмерное использование RabbitMQ на данном конкретном случае?

ответ

0

После некоторых исследований, я чувствую, что это должно быть хорошая практика:

  • Там должен быть один обмен. Например, searchrequest.
  • Две очереди, одна для входящих запросов и других за ответов.
  • Весь отдельный обмен должен маршрутизировать сообщение из очереди запросов или ответов на основе заданного ключа маршрутизации.
  • Когда какая-либо услуга выполняет поиск, отправляет сообщение searchrequest exchange and request routing key. Когда служба индексирования поиска создает ответ, он отправляет его в searchrequest, но он публикует ответное сообщение с ответ ключ маршрутизации.

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

+0

Проверьте это [от Udi Dahan] (http://udidahan.com/2011/03/20/careful-with-content-based-routing/) –

+0

@SeanFarmar Хорошая статья. Ну, это не правило (* не используйте маршрутизацию ESB *), но я знаю, что маршрутизацию можно злоупотреблять. Я считаю, что мой собственный ответ - хорошая практика, потому что в конце дня вы все еще развертываете две очереди, а * exchange * действует как пространство имен ESB. Что вы думаете об этом? –

+0

Я сторонник простоты и разделения каналов. Мне кажется естественным, чтобы (в описанном вами сценарии) поисковый командный процессор и процессор результатов поиска, как только процессор команд поиска завершит свою работу, он отправит команду результата поиска с индексированными данными, процессор результатов поиска будет делать все, что ему нужно, чтобы сделать свою работу ... Смысл? –

1

Похоже, вы хотите использовать шаблон RPC? Чтобы следовать протоколу, вы должны опубликовать ответ на основе ReplyTo или ReplyToAddress от BasicProperties. Таким образом, до вызывающего абонента (реквестера) будет определено, где ожидается публикация ответа. По моему мнению, может быть излишним объявить выделенный обмен для одного типа сообщений. Для более высокой производительности вы можете использовать функцию direct reply to. Есть a lot of high level clients, который поможет вам справиться с некоторыми из этих вещей.

+0

Спасибо за ваш ответ. Он добавляет больше деталей к моей проблеме. Кстати, я считаю, что мой автоответчик лучше подходит для моего домена, потому что мне нужен ACK.Но хорошо знать, что для других случаев есть встроенный подход! –

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