互联网金融消息队列ZeroMQ

Posted HelloWorld搬运工

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了互联网金融消息队列ZeroMQ相关的知识,希望对你有一定的参考价值。

之前对消息队列服务中间件进行了对比,具体可以参看。

一般互联网公司都使用消息队列来实现系统解耦,提速,广播,流量削峰等应用场景。

ZeroMQ,低延时、高性能特性,被应用于实时性要求高的系统解耦。

1、什么是ZeroMQ:

据官方文档介绍,ZeroMQ是一个可伸缩的分布式或者高并发的异步网络消息库。不同于其他的服务,例如RabbitMQ等消息队列服务,以一种可独立运营的服务存在,ZeroMQ是一套高效的socket library,是对BSD socket进行的上层封装。在传统的BSD网络开发模型中,采用的是socketsocket之间的消息传输,即11的消息传输链接,在ZeroMQ中是nodenode之间的消息传输,node之间存在多条数据链接,即N M的消息传输链接。ZeroMQ在底层实现了关于进程通信、网络通信、线程通信等各种细节的封装,让开发者更多的关注应用层的开发。

简单来说,ZeroMQ是对Socket进行了封装的lib库,在使用的时候不用搭建队列环境,只需要引入lib包,然后在生产方和消费方调用API就可以。

2、ZeroMQ的主要特点

  • I/O操作属于后台异步操作,同时采用的是无锁数据结构,提高应用的高并发性;

  • 存在断线重连机制,ServerClient启动的无序性;

  • 消息的消费者处理速度比较慢时,会导致消息的生产者阻塞或者,可以在使用过程中进行设置;

  • 消息内容可以使用任何的格式,框架本身不对消息格式做任何的限制;

3、ZeroMQ的基本使用模型

ZeroMQ提供了三个经常使用的基本模型,分别为:Request—ReplyPublish—SubscribeParallel PipeLine三种工作模型,通过这三种工作模型可以衍生出很多的使用模型。下面分别对这三种模型进行简单的介绍:

1Request—Reply模型

Request—Reply模型与传统的BSD网络开发模型类似,也就是俗称的应答模型,具体模型如下图所示


Server代码如下:

互联网金融消息队列ZeroMQ


Client代码如下:

互联网金融消息队列ZeroMQ


在使用该模型过程中存在几个注意事项:

  • 必须采用严格的发送——接受的顺序,否则会导致此次的发送或者接受失败;

  • 区别传统的BSD开发,Server先启动,Client再启动的流程,在ZeroMQServerClient启动顺序没有要求;

  • 消息内容的无关性,ZeroMQ不关心传输数据的具体内容,由发送或者接收方负责编码或者解析;

  • 发送频率受端口链接数限制,如果超过限制会导致jvm停止

2Pub-Sub模型

Pub-Sub模型是一个服务器将消息发送给多个客户端,类似于群发短信的业务场景

互联网金融消息队列ZeroMQ


Pub侧代码如下:

互联网金融消息队列ZeroMQ


 Sub侧代码如下:

互联网金融消息队列ZeroMQ


Pub-Sub模型使用过程中的注意事项为:

  • 需要在服务中显式设置服务是PUB还是SUB,即在服务中需要明确在系统中扮演的角色;

  • 扮演PUB角色的服务,不可以调用zmq_recv,扮演SUB角色的服务,不可以调用zmq_send角色,否则会导致服务出错;

  • PUB允许存在多个SUB服务,SUB服务也允许从多个PUB中订阅数据;

  • 使用这种模型最适合的场景为:SUB在启动时,不关心PUB已经发送的数据内容;

  • PUB在没有接收到SUB连接请求的情况下,PUB会丢弃全部的数据;

  • 如果SUB的处理效率比较慢,PUB侧会维持消息队列;

  • 根据设置的过滤条件的不同,过滤条件生效的位置不同;

3Parallel PipeLine

Server端作为Push端,而Client端作为Pull端,如果有多个Client端同时连接到Server端,则Server端会在内部做一个负载均衡,采用平均分配的算法,将所有消息均衡发布到Client端上。如果有多个Server端同时连接到Client端,这里PushPull之间的对应关系是多个Push角色对应一个Pull角色,在ZeroMQ中,给这种结构取的名叫做公平队列,这里也就是说将Pull角色理解为一个队列,各个Push角色不断的向这个队列中发送数据。与发布订阅模型相比,推拉模型在没有消费者的情况下,发布的消息不会被消耗掉;在消费者能力不够的情况下,能够提供多消费者并行消费解决方案。该模型主要用于多任务并行处理。

互联网金融消息队列ZeroMQ


Push端代码实现:


Pull端代码


注意事项:

PULL端可以过滤接收到的消息,在设置connect参数的时候在端口后边添加过滤字符串。


以上是关于互联网金融消息队列ZeroMQ的主要内容,如果未能解决你的问题,请参考以下文章

深度 | 金融级消息队列的演进 — 蚂蚁金服的实践之路

干货 | 金融级消息队列的演进 — 蚂蚁金服的实践之路

业内交流|阿里巴巴中间件:信用算力实现金融级数据服务的实践

蚂蚁金融推迟上市:互联网金融是否要遭遇滑铁卢

网信集团最新消息:将迎来曙光

网信普惠/集团最新消息,专项化解兑付