Конкурирующий потребитель в Redis Pub/Sub поддерживается?
У меня есть 2 службы. Оба они нуждаются в подписке на один и тот же канал.
2 службы сбалансированы по нагрузке. Каждая служба работает на нескольких серверах.
Итак, как я могу быть уверен, что только 1 экземпляр каждой службы потребляет сообщение этого канала.
Поддерживается ли это на Redis?
Спасибо
Ответы
Ответ 1
Pubsub не работает таким образом - сообщение отправляется всем подключенным подписчикам. Однако вы можете настроить его так, чтобы канал был уведомлением об обновлении списка. Таким образом, все клиенты получат сообщение, но только один может взять элемент из списка с помощью LPOP.
Ответ 2
Другим подходом было бы использовать B*POP
из ваших экземпляров службы. Если у вас есть много клиентов, работающих под B*POP
по списку, всякий раз, когда вы LPUSH
к нему, один из этих клиентов получит данные, но только один.