因爲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(主程序):
UserLogin.cs:
UserInfo.cs:
GenerateKey.cs:
Consumer.cs:
KeyListening.cs:
MQHelper.cs:
UserLogout.cs:
百度雲連接:https://pan.baidu.com/s/1Y93rcqnsv1cA9ZIxH2xrBw 密碼:zfc5