0

Допустим, есть N производителей и М пользователей, которые подписываются на этих N производителей. Здесь N производитель производит N различных типов сообщений, напримерRedis pub sub для нескольких производителей и нескольких потребителей

 
producer1 produces messageType1, 
producer2 produces messageType2, 
producer3 produces messageType3, 
. 
. 
. 
producerN produces messageTypeN. 

М пользователей может подписаться на эти сообщения. Один пользователь может подписаться на несколько типов сообщений. Например.

 
user1 consumes (messageType1, messageType2, messageType10) 
user2 consumes (messageType14, messageType5) 
. 
. 
userM consumes (messageType21, messageType22, messageType23, .... messageTypeN) 

Пользователи могут использовать одинаковые или разные типы сообщений. Мои вопросы - как разработать этот сценарий. Это похоже на паб-шаблон. Для этого сценария мне нужно создавать каналы для каждого пользователя в redis. Если да, существует ограничение на количество каналов redis, которые можно создать (10K). В этом случае, как обрабатывать миллионы пользователей? Любая помощь будет оценена по достоинству.

ответ

1

В сценарии pub/sub вы должны создать каналы за производителя. Каждый пользователь подписывает каналы соответствующих производителей.

Side Пользователь

// user1 
subscribe producer1 producer2 
// user2 
subscribe producer2 

Side Производитель

// producer1 
publish producer1 message1 
// producer2 
publish producer2 message2 

Ограничение является НЕ число каналов, которые можно создать, но количество клиентов соединения. Вы НЕ МОЖЕТЕ иметь миллионы пользователей одновременно подключаться к одному экземпляру Redis.

Возможное решение

Для того, чтобы достичь этого, вы должны создать несколько экземпляров Redis и пользователей осколок в shardings. Каждый экземпляр Redis создает полный список производителей и обрабатывает соединения только из одного осколка пользователей.

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

+0

Спасибо за идеальное решение :) – big