以ZMQ为基础的通信模型
最近使用了一下ZMQ的java版本,先不评述其它,网上已经有很多内容了。
我通过ZMQ的模式,在MsgClient,MsgServer中封装了基础ZMQ的使用。以此扩展了使用模型;
主要是基于2类分布式
1.订阅发布模型
你可以原样使用订阅发布ZMQ。我再此基础上进行了如图扩展
MQ为消息中心,发布端将消息发送给MQ,订阅端订阅;每个MQ处理了接收发布,订阅的端口外,另外添加了自己节点的全数据接口,可以将节点的所有数据发送出去,我称为级联接口,另外还有一个服务验证端口;
如图,MQ1与MQ2建立了级联,则SUB2将可以收到PUB1,PUB2的数据,SUB1只能接受PUB1的数据,类似,SUB3可以接收PUB1,PUB2,PUB3的数据,MQ2启动后与MQ1级联,则MQ2会订阅MQ1的全数据。
如果MQ1如果通过请求服务端口,连接不上,则认为MQ1死亡,有MQ2建立了级联关系,如果发布订阅端设置了允许判断更新,那么PUB1,SUB1将自动连接到MQ2,直到MQ1恢复,PUB1,SUB1将再次连接到MQ1.
级联信息及发布订阅地址,是每个MQ提供一个服务接收,专门处理,所以一个完整的扩展,MQ就需要5个端口;分别是发布订阅的前后端2个,级联全数据1个,请求服务1个以及1个监视端口;
MQ定时会向监视管理地址发送MQ信息,原设计是监视管理接收到MQ信息,通过该信息,可以向每个MQ的请求服务发送指令,随时建立级联,网页图像化,类似上图,拖到箭头就可以使MQ建立级联关系。监视管理客户端现在没有实现,我不是做前端的。
补充:上面的扩展有一个问题,监测MQ的死亡需要时间,默认20秒,那么这20秒内的数据怎么办呢,为了解决该问题,默认把最近20000包数据缓存在内存中,如果超出就落盘(嵌入式数据库),开启一个线程,不断删除20秒以外的落盘数据,同时最新的落盘。一旦MQ发送死亡通过级联更新发布订阅地址,则将最新的数据再次发送。开启该功能订阅端已经了消息重复判断。每一个发布端进程,都会在消息数据头上加入一个消息ID(IP+PID+标识,标识的方式是时间戳(ddHHmmss)+序列号,当前认为每秒最大10w包生成);订阅端会记录接收的消息ID,判断最近30s内是否接收过该信息,解析的时间是根据标识的时间戳30s,这样解决死亡丢失和重复问题。当然如果开启了该功能,则会造成jar很大,引入了嵌入式数据库包,同时会增加内存。所以在没有必要的情况下建议关闭。缓存的包数,判断的时间都可以自己根据需要设置。
2.分布式服务模型
分布式服务模型直接使用了ZMQ的代理模式router-dealer
简单使用原来模式即可完成,也可以自己多重组合
针对以上模式的扩展,将代理变为多个,进行主从备份,原来类似订阅发布
扩展模型如图:
REQ,REP封装了生产类,为一个REQ,REP组,生产的组可以将代理1,代理2的地址同时传入,在生产时,获取到master,双方都会去连接master地址,如果代理没有指定master,则IP,端口大的为master.生产类会隔一段时间要求各个组检查自己的连接状态,如果连接的代理死亡,就连接其它代理,直到master恢复后重新置回。
检查的方式依然是每个代理另外提供一个端口(代理的服务端口+1),提供一个服务检查,检查失败或者检查到代理设置了master就要要求各个组处理。服务不用解决时间内失效问题,请求会自然返回错误。
该代码已经上传git
地址:
https://github.com/jinyuttt/ZMQMSG.git
以ZMQ为基础的通信模型的更多相关文章
- 网络通信 --> ZMQ安装和使用
ZMQ安装和使用 ZMQ 并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,它更像是一个底层的网络通讯库,在 Socket API 之上做了一层封装,将网络通讯.进程通讯和线程通 ...
- ZeroMQ(ZMQ)函数接口英汉直译
找了好多地方都找不到ZMQ接口函数的中文文档,就厚着脸皮自己翻译了下.但因为作者本人涉世未深,翻译有错误的地方还请大家不吝赐教,在下感激不尽. 因为时间有限,只能一点一点翻译了. ZMQ接口文档的官方 ...
- 异步编程系列06章 以Task为基础的异步模式(TAP)
p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...
- zookeeper系列之通信模型(转)
本文的主题就是讲解Zookeeper通信模型,本节将通过一个概要图来说明Zookeeper的通信模型. Zookeeper的通信架构 在Zookeeper整个系统中,有3中角色的服务,client.F ...
- ZeroMQ接口函数之 :zmq - 0MQ 轻量级消息传输内核
官方网址:http://api.zeromq.org/4-0:zmq zmq(7) 0MQ Manual - 0MQ/3.2.5 Name zmq – ØMQ 轻量级消息传输内核 Synopsis # ...
- ZeroMQ接口函数之 :zmq_close - 关闭ZMQ socket
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_close zmq_close(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_close ...
- ZeroMQ接口函数之 :zmq_ctx_destroy - 销毁一个ZMQ环境上下文
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_destroy zmq_ctx_destroy(3) ØMQ Manual - ØMQ/3.2.5 Nam ...
- ZeroMQ接口函数之 :zmq_ctx_new – 创建一个新的ZMQ 环境上下文
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_new zmq_ctx_new(3) ØMQ Manual - ØMQ/3.2 ...
- ZeroMQ接口函数之 :zmq_ctx_shutdown - 停止一个ZMQ context
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_shutdown zmq_ctx_shutdown(3) ØMQ Manual - ØMQ/4.1.0 N ...
随机推荐
- 1.浅析Hadoop之HDFS
HDFS ,Hadoop Distribute File System,hadoop分布式文件系统. 主从架构,分主节点NameNode,从节点DataNode.当然还有个SecondaryName, ...
- cf375D. Tree and Queries(莫队)
题意 题目链接 给出一棵 n 个结点的树,每个结点有一个颜色 c i . 询问 q 次,每次询问以 v 结点为根的子树中,出现次数 ≥k 的颜色有多少种.树的根节点是1. Sol 想到了主席树和启发式 ...
- Linux虚拟系统安装——Ubuntu18.04 & CentOS6.5
Linux虚拟系统安装--Ubuntu18.04 & CentOS6.5 摘要:Linux简介.虚拟系统安装.系统备份与文件介绍 1. Linux简介 (1)1968年,MIT.Bell实验室 ...
- 2018年哔哩哔哩bilibili前端开发工程师在线笔试1
##基础编程能力考查(共1题) 给定一个数组,其中有n(1<n<10000)个整数,检查是否能通过修改不多余一个元素就能让数组从小到大排列. 例1: 输入:[4,2,3] 输出:true ...
- c#中 定时器周期执行某事件 以及,重置 定时器重新计时的方法
static void Main(string[] args) { System.Timers.Timer timer = new System.Timers.Timer(); timer.Enabl ...
- SQL Server ->> 存储过程sp_rename重命名数据对象
1) 表转移Schema和重命名表 ALTER SCHEMA Stage TRANSFER dbo.Stage_AAA; EXEC sp_rename 'Stage.Stage_AAA', 'AAA' ...
- TP5.0:新建控制器
例如,我们在admin模块下创建一个名为OneMenu.php的控制器 1.在该控制器文件中内容为: 2.访问的URL为:http://localhost/tp5/public/index.php/a ...
- GitLab 数据备份和恢复
GitLab 备份 /opt/gitlab/bin/gitlab-rake gitlab:backup:create //只是备份各项目的数据 完成后会在默认路径下多出来备份的tar包! /var/o ...
- Linux下实现普通用户免密登录并执行root权限
需求:服务器的root和密码登录都禁用,只开放普通用户登录,这时需要给普通用户配置秘钥文件,实现无密码登录 需要注意的是使用什么用户,就把秘钥文件拷入到该用户的家目录下,如果是root用户,就直接拷贝 ...
- YouTube 1080P高清视频下载方法
在国内在线视频网站还停留在1080P蓝光的时候,YouTube早已经支持4K和8K分辨率的极清视频.虽然4K和8K的清晰度比1080P高了许多档次,但是大部分人的电脑播放4K视频还是很卡的,所以目前来 ...