При использовании RabbitMQ для отправки сообщений у вас в основном есть обмены, очереди и привязки. Я понял их идею и то, как они соотносятся друг с другом, но я не совсем уверен, кто что делает.
В принципе, у меня есть три сценария в моем приложении.
Сценарий 1: один издатель, несколько рабочих процессов
То, что я хочу достичь, - это один компонент, который отправляет сообщения в очередь, и должно быть несколько рабочих процессов, которые обрабатывают элементы в этой очереди. Мне это кажется очень легким. Настройка выполняется следующим образом:
- Обмен: 1 обмен с типом 'direct'
- Очередь: 1 очередь
- Связывание: очередь привязана к обмену
Всякий раз, когда сообщение отправляется на обмен, оно доставляется в очередь, а рабочие процессы выполняют свои задачи.
Все должно быть долговечным.
Итак, кто что делает? По-моему:
- Производитель создает обмен.
- Производитель создает очередь (поскольку в настоящее время не может быть никаких рабочих процессов, и сообщение будет потеряно в противном случае, если не было очереди)
- Производитель выполняет привязку очереди к обмену
- Потребители просто слушают в очереди
Right?
Сценарий 2: один издатель, несколько подписчиков, изменчивые сообщения
Второй сценарий совсем другой. В основном это сценарий pub/sub, где каждое сообщение отправляется каждому слушающему клиенту. Если клиент переходит в автономный режим, он больше не получает сообщений, и он не хранится нигде для него. Это означает следующую настройку:
- Обмен: 1 обмен с типом 'fanout'
- Очередь: n очередей, по одному для каждого пользователя
- Связывание: каждая очередь должна быть привязана к обмену
Итак, кто что делает? По-моему:
- Производитель создает обмен.
- Потребитель создает очередь (так как это ее собственная очередь, и производитель не может знать, кто бы ни интересовался сообщениями)
- Потребитель создает привязку для своей очереди к обмену
- Потребитель прислушивается к своей очереди
Right?
Сценарий 3: один издатель, несколько подписчиков, прочные сообщения
В основном то же самое, что и сценарий 2, но сообщения не должны быть потеряны, если потребитель переходит в автономный режим. По-моему, это ничего не меняет - правильно?