转: 利用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.Clientdotnet add package MySql.Data
dotnet restore

2、项目结构

Client.cs(主程序):

 

 UserLogin.cs:

 

 UserInfo.cs:

 

 GenerateKey.cs: 

 

 Consumer.cs:

 

 KeyListening.cs:

 

 MQHelper.cs:

 

 UserLogout.cs:

 

百度云链接:https://pan.baidu.com/s/1Y93rcqnsv1cA9ZIxH2xrBw 密码:zfc5

原文地址:https://www.cnblogs.com/saryli/p/9742756.html

时间: 2024-11-05 18:43:49

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

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

由于RabbitMQ中只有队列(queue)才能存储信息,所以用RabbitMQ实现超大用户级别(百万计)的消息在/离线收发需要对每一个用户创建一个永久队列. 但是RabbitMQ节点内存有限,经测试后发现节点集群也无法满足数百万用户队列收发数据的要求,所以最终决定采用数据库辅助实现该功能. 一.数据库结构 user_list数据库下有4张表:user_info.group_info.groupmember_info.message_info. user_info表中含有username(主键,

Mysql事务的隔离级别

注:转 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销.Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果.本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少.读取未提交的数据,也被称之为脏读(Dirty Read).Read Committed(读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是MySQL默

关系型数据库之Mysql引擎-日志-用户管理(三)

MySQL锁机制      相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制. 执行操作时施加的锁的模式    读锁:用户在读的时候施加的锁,为防止别人修改,但是用户可以读,还被称为共享锁    写锁:独占锁,排它锁.其他用户不能读,不能写 MySQL大致可归纳为以下3种锁:    表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低.    行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度

mysql中的用户管理

由于工作的需要,要新建一个mysql的用户,在查阅了mysql的手册之后,做了如下的一些方法记录. #新增一个mysql用户custom,密码为obscure,只能从本机访问和操作数据库testGRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on test.* TO 'custom'@'localhost' IDENTIFIED by 'obscure';#执行完成后会发现user表中多了一条记录,db表中也多了一条记录,并且权限是写入db表的 GRA

MySQL数据库事务隔离级别(Transaction Isolation Level)

今天在学习JDBC的时候看到了关于MySql的事务的隔离级别的问题,感觉内容挺高级的,所以记录一篇文章,以备后面使用. 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. 2 [mysqld] 3 transaction-isolation = R

MySQL基础——事务隔离级别

事务是DBMS得执行单位.它由有限得数据库操作序列组成得.但不是任意得数据库操作序列都能成为事务.一般来说,事务是必须满足4个条件(ACID) ①:原子性(Autmic):事务在执行性,要做到"要么不做,要么全做!",就是说不允许事务部分得执行.即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响! ②:一致性(Consistency):事务操作之后,数据库所处的状态和业务规则是一致的;比如a,b账户相互转账之后,总金额不变! ③:隔离性(Isolation):如果

CentOS环境利用mariadb(mysql)数据库使用golang实现分布式系统的Leader选举

一.准备工作 1.下载安装vmware,步骤省略. 2.下载CentOS系统ios包:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1611.iso 3.下载安装Xshell5,步骤省略. 4.下载安装git,步骤省略. 5.mariadb用于golang的api:https://github.com/go-sql-driver/mysql 6.vmware中依次点击"创建新的虚拟机&q

FrameWork数据权限浅析2之基于用户级别的中间表机制实现行级数据安全

在上一篇笔记中我已经说了如何利用FM自带的机制配合我们已经通过验证的用户空间的组来实现行级数据安全的控制,但是由于上一个方法存在的缺点是以后如果对该对象增加基于用户或者角色的访问权限就需要开发人员去FM模型添加操作,这样就大大的增加了我们系统的维护成本,下面我们就来说一下另外一种方法:基于用户级别的中间表机制实现行级数据安全 ps:这种方法命名只是笔者的一种定义说法,属个人想法而已,各位千万不要拿来铭记,重要的是过程,至于名字,就让他随风飘吧. 下面我们就走入正题,如何利用基于用户级别的中间表机

第三篇 ubuntu下,mysql 的root用户密码忘了怎么办?

好长一段时间没有使用ubuntu了,今天进来玩玩,结果连mysql的root用户密码都忘记了.就上网找了一下,发现如下解决办法,试了一下,可行!记录在此,环境问题,是需要注意的. Ubuntu Server 12.04 LTS,用 apt-get 安装 MySQL 过程中没有提示设置 root 账号的密码,安装完成后发现 root 空密码无法登录. 解决方案: 其实 debian 系的 MySQL 安装过程中会设置一个默认的账户,这个文件里保存了默认账号的信息 cat /etc/mysql/de