轉: 利用RabbitMQ、MySQL實現超大用戶級別的消息在/離線收發

因爲RabbitMQ中只有隊列(queue)才能存儲信息,因此用RabbitMQ實現超大用戶級別(百萬計)的消息在/離線收發須要對每個用戶建立一個永久隊列。shell

可是RabbitMQ節點內存有限,經測試後發現節點集羣也沒法知足數百萬用戶隊列收發數據的要求,因此最終決定採用數據庫輔助實現該功能。數據庫

1、數據庫結構測試

user_list數據庫下有4張表:user_info、group_info、groupmember_info、message_info。spa

user_info表中含有username(主鍵,非空,VARCHAR(50))、password(非空,VARCHAR(50))、routingkey(非空,VARCHAR(50))、has_queue(INT UNSIGNED)四個字段。rest

group_info表中含有groupname(主鍵,非空,VARCHAR(50))、password(非空,VARCHAR(50))、creator(非空,VARCHAR(50))三個字段。code

groupmember_info表中含有username(主鍵,非空,VARCHAR(50))、groupname(主鍵,非空,VARCHAR(50))兩個字段。blog

message_info表中含有sendtime(非空,VARCHAR(50))、body(非空,VARCHAR(300)),receiver(非空,VARCHAR(50))、sender(非空,VARCHAR(100))四個字段。隊列

 

2、客戶端結構內存

一、文件夾建立以及包依賴安裝:it

dotnet new console --name Client
mv Client/Program.cs Client/Client.cs
cd Client
dotnet add package RabbitMQ.Client
dotnet add package MySql.Data dotnet restore

二、項目結構

Client.cs(主程序):
  View Code

 UserLogin.cs:

  View Code

 UserInfo.cs:

  View Code

 GenerateKey.cs: 

  View Code

 Consumer.cs:

  View Code

 KeyListening.cs:

  View Code

 MQHelper.cs:

  View Code

 UserLogout.cs:

  View Code

 

百度雲連接:https://pan.baidu.com/s/1Y93rcqnsv1cA9ZIxH2xrBw 密碼:zfc5
相關文章
相關標籤/搜索