0

假設有N個生產者和M個用戶訂閱這N個生產者。這裏N生產者產生N種不同類型的消息,例如多個生產者和多個消費者的Redis pub子

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

M個用戶可以訂閱這些消息。一個用戶可以訂閱多種類型的消息。例如。

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

用戶可能使用相同或不同的消息類型。我的問題是如何設計這種情況。它看起來像酒吧子模式。對於這種情況,我是否必須在redis中爲每個用戶創建頻道。如果是,則可以創建的redis頻道數量有限制(10K)。在那種情況下如何處理數百萬用戶?任何幫助,將不勝感激。

回答

1

在pub/sub場景中,您應該爲每個生產商創建渠道。每個用戶都訂閱相應生產者的渠道。

用戶側

// user1 
subscribe producer1 producer2 
// user2 
subscribe producer2 

製片方

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

的限制是不是你可以創建通道的數量,但客戶端的數量連接。您不能讓數百萬用戶同時連接到單個Redis實例。

一個可能的解決方案

爲了做到這一點,你必須創建多個Redis的情況下,和碎片用戶分爲shardings。每個Redis實例都會創建一個完整的生產者列表,並僅處理來自一個用戶分片的連接。

生成消息時,可以將消息發佈到每個Redis實例的相應通道上,以便訂閱該通道的用戶可以接收該消息。

+0

感謝您的完美解決方案:) – big

相關問題