当前位置: 首页 > news >正文

转: 利用RabbitMQ、MySQL实现超大用户级别的消息在/离线收发

由于RabbitMQ中只有队列(queue)才能存储信息,所以用RabbitMQ实现超大用户级别(百万计)的消息在/离线收发需要对每一个用户创建一个永久队列。

但是RabbitMQ节点内存有限,经测试后发现节点集群也无法满足数百万用户队列收发数据的要求,所以最终决定采用数据库辅助实现该功能。

一、数据库结构

user_list数据库下有4张表:user_info、group_info、groupmember_info、message_info。

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

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

groupmember_info表中含有username(主键,非空,VARCHAR(50))、groupname(主键,非空,VARCHAR(50))两个字段。

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

 

二、客户端结构

1、文件夹创建以及包依赖安装:

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

2、项目结构

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

相关文章:

  • alibaba笔试2
  • python爬取网站数据,如何绕过反爬虫策略
  • [OGRE]看备注学编程(02):打地鼠01-布置场地九只地鼠
  • 巧用 TypeScript (一)
  • 谁在使用MongoDB
  • 精选Excel之Ctrl+26字母快捷键,职场办公人员必会!
  • mac下搭建java开发环境:eclipse+tomcat+maven
  • 分布式id生成
  • Android Day1
  • 插件和目标
  • 云信IMweb端开发总结
  • 数字转换为壹仟贰佰叁拾肆的Java方法
  • webgl学习,知识储备
  • 记录一下自己的xen迁移过程
  • 10.9PMP每日一题
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 77. Combinations
  • angular组件开发
  • Java多线程(4):使用线程池执行定时任务
  • MySQL-事务管理(基础)
  • 爱情 北京女病人
  • 动态魔术使用DBMS_SQL
  • 给github项目添加CI badge
  • 基于 Babel 的 npm 包最小化设置
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • !$boo在php中什么意思,php前戏
  • #define用法
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转载)(官方)UE4--图像编程----着色器开发
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .cfg\.dat\.mak(持续补充)
  • .gitignore文件—git忽略文件
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • /etc/sudoers (root权限管理)
  • :not(:first-child)和:not(:last-child)的用法
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • []C/C++读取串口接收到的数据程序
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [Android]竖直滑动选择器WheelView的实现
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [MySQL]日期和时间函数
  • [one_demo_16]直接插入排序的demo