最近使用了一下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为基础的通信模型的更多相关文章

  1. 网络通信 --> ZMQ安装和使用

    ZMQ安装和使用 ZMQ 并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,它更像是一个底层的网络通讯库,在 Socket API 之上做了一层封装,将网络通讯.进程通讯和线程通 ...

  2. ZeroMQ(ZMQ)函数接口英汉直译

    找了好多地方都找不到ZMQ接口函数的中文文档,就厚着脸皮自己翻译了下.但因为作者本人涉世未深,翻译有错误的地方还请大家不吝赐教,在下感激不尽. 因为时间有限,只能一点一点翻译了. ZMQ接口文档的官方 ...

  3. 异步编程系列06章 以Task为基础的异步模式(TAP)

    p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...

  4. zookeeper系列之通信模型(转)

    本文的主题就是讲解Zookeeper通信模型,本节将通过一个概要图来说明Zookeeper的通信模型. Zookeeper的通信架构 在Zookeeper整个系统中,有3中角色的服务,client.F ...

  5. ZeroMQ接口函数之 :zmq - 0MQ 轻量级消息传输内核

    官方网址:http://api.zeromq.org/4-0:zmq zmq(7) 0MQ Manual - 0MQ/3.2.5 Name zmq – ØMQ 轻量级消息传输内核 Synopsis # ...

  6. 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  ...

  7. 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 ...

  8. ZeroMQ接口函数之 :zmq_ctx_new – 创建一个新的ZMQ 环境上下文

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_new zmq_ctx_new(3)               ØMQ Manual - ØMQ/3.2 ...

  9. 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. linux环境下安装jdk(本文示例是jdk1.6.0_45)

    第一步:创建一个文件夹安装jdk(虽说地址一般自定义,但是为了方便查找请按照笔者建议目录 ):/usr/java 将jdk-6u45-linux-x64.bin文件放到   /usr/java 文件夹 ...

  2. Java入门到精通——调错篇之Eclipse Java compiler level dose not match the version of the installed Java project

    一.错误现象. java项目显示红色,并且类中引用包中会报红色错误,在Eclipse下面显示下面错误提示如图: 二.错误原因. 通过字面意思一看就很明白java的版本不对. 三.解决办法. 3.1右键 ...

  3. Learn by pictures on Computer Fields

  4. 【起航计划ObjC 002】印第安老斑鸠ObjC的幻想 ---- Ubuntu下安装并使用MAC虚拟机

    本文介绍如何在Ubuntu下安装Mac OS X Mavericks系统.具体如下: 1)安装前准备工作 下载Mac OS X Mavericks系统,地址:http://pan.baidu.com/ ...

  5. matlab练习程序(演化策略ES)

    还是这本书上的内容,不过我看演化计算这一章是倒着看的,这里练习的算法正好和书中介绍的顺序是相反的. 演化策略是最古老的的演化算法之一,和上一篇DE算法类似,都是基于种群的随机演化产生最优解的算法. 算 ...

  6. python大数据

    http://blog.csdn.net/xnby/article/details/50782913 一句话总结:spark是一个基于内存的大数据计算框架, 上层包括了:Spark SQL类似Hive ...

  7. xshell里的一些配色方案

    只需要把下面的代码复制到记事本中,保存为xcs文件格式,然后在xshell中导入选中就可以换配色方案了,可以自己修改下面的代码 [ubuntu]text(bold)=ffffffmagenta(bol ...

  8. (二)selenium元素定位

    selenium定位方法 Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css se ...

  9. python:生成器进阶

    1,列表推导式 值 for 循环 2,生成器表达式 g=(i for i in range(10)) print(g) for i in g: print(i) 3,列表推导式与生成器表达式的区别 # ...

  10. 2019.03.19 ZJOI2019模拟赛 解题报告

    得分: \(100+10+45=155\)(\(T1\)又是水题,\(T2\)写暴力,\(T3\)大力\(STL\)乱搞) \(T1\):哈夫曼树 首先,根据题目中给出的式子,可以发现,我们要求的其实 ...