У меня 2 услуги. Им обоим нужно подписаться на один и тот же канал.

Две службы сбалансированы по нагрузке. Каждая служба работает на нескольких серверах.

Итак, как я могу быть уверен, что только 1 экземпляр каждой службы потребляет сообщение этого канала.

Поддерживается ли это в Redis?

Благодарность

44
jordan 25 Авг 2011 в 23:47

3 ответа

Лучший ответ

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

45
Tom Clarkson 25 Авг 2011 в 20:41

Другой подход - использовать B*POP из ваших экземпляров службы. Если у вас много клиентов, работающих со списком B*POP, при каждом обращении к нему LPUSH один из этих клиентов получит данные, но только один.

36
dunedain289 25 Авг 2011 в 21:49

Вам нужно использовать Redis Streams с XREADGROUP, это новая функция Redis.

https://redis.io/topics/streams-intro

3
dlopezgonzalez 17 Фев 2021 в 12:07