zeromq-协议相关扩展学习

一、zeromq简单介绍

        ZeroMQ(也称为ØMQ,0MQ或ZMQ)是一个高性能的异步消息传递库,旨在分布式或并发应用程序中使用。它提供了一个消息队列,但与面向消息的中间件不同,ZeroMQ系统可以在没有专用消息代理的情况下运行。

        ZeroMQ支持通过各种传输(TCP,进程内,进程间,多播,WebSocket等)的常见消息传递模式(发布/订阅,请求/回复,客户端/服务器等),使进程间消息传递像线程间消息传递一样简单。这样可以使您的代码保持清晰,模块化并且非常易于扩展。

        ZeroMQ是由一个大型贡献者社区开发的。许多流行的编程语言都有第三方绑定,C# 和 Java 的本机端口也是如此 

        ZeroMQ更像是一种协议扩展,类似协议应用层,一般的消息中间件是在次基础上进行后期开发

        本文借助纯java版本jeromq源码来分析,简单理解zeromq中几种常用模式的设计思想,底层实现基于reator模式的nio

二、几种常见设计模式

  • req-rep,同步,核心模块为ctx(全局核心类库,类似spring容器)、IOThread(IO线程对象,管理req与rep间的通信,可以理解为进程间通信组件)、TcpListener(监听tcp连接,同步哦命令方式注册连接渠道到IOThread)、Command(命令行对象)、Mailbox(用于管理服务内部组件之间的通信,通过command线程间交流)、Rep(服务端类似socket服务,管理绑定tcp/ip所有行为)
    • 设计原理图如下:
      • 协议:tcp/ip,底层核心代码nio
      • 同步模式:req-rep,核心组件介绍
      • Ctx:上下文容器,管理全局组件
      • Rep:服务端伪socket,管理所有与此端口相关的组件
      • TcpListener:监听客户端新建连接,并注册连接渠道,建立pipe管道绑定Rep,从而使服务端应用程序用pipe获取消息
      • IOThread:进程间通信,客户-服务端信息监听,并触发调用事件发送命令至信件或消息至pipe
      • Mailbox:信件,线程间(组件)通信,一般是命令交流;内部含有chnnel,和Ypipe(放command)
      • Poller:建立守护线程轮询,通过Selector监听渠道调用事件,IOThread组件中的Poller更是担任了信件间以及客户和服务端间中转站角色
      • SessionBase:客户端和服务端会话,建立连接后通过它传递消息,内部封装有pipe
      • StreamEngine:session中底层IO交流,从SocketChannel获取消息,并写入pipe,同时发送消息到SocketChannel
      • IOObject:封装了IOThread中的Poller和事件处理器handler(IPollEvents),本身也实现IPollEvents
      • Command:命令,内不包含ZObject,命令类型,传递的
      • Handle:Poller中内部组合有SelectableChannel和IPollEvents,事件类型等,用于将channel注册到poller中selector,绑定事件响应对象
      • 备注:req-rep,建立连接需要多次反复发送命令和注册channel以及监听响应事件,,命令和信号提示像言出法随。61c3059ca6a94f85a6533057982c6362.png98d21835c23d49eaa37886ce1fd35dc0.png
  • 自定义Broker(组合Dealer-Pouter),模拟信息传送操作e739151b68c247ada6154bed9f4e78fc.png
  • Pub-Sub(模式,发布订阅模式,使用单向队列通信)
    • Pub:发布者,向订阅者广播
      Mtrie:订阅者session渠道Pipe,代表主题,每个主题维护多个订阅者渠道
      Dist:发布消息,维护所有渠道Pipe                                                                                  备注:这里主题默认使用首字母模糊匹配;会话连接需要耗时,很大概率存在消 息丢失情况;在此选择主题发布消息,避免资源消耗                                                                                                 b37027296e2d41bbb57f53f24978e9ec.png
    • Sub:客户端订阅者
      FQ:入栈Pipe管理,用来接收消息
      Dist:订阅分发到上行服务,注册订阅主题,不会被丢弃
      Trie:订阅注册管理,只是管理订阅节点数据
      XSub:扩展了Sub套接字24840eb2ad9942fe9e8898413de60eed.png
  • Push-Pull模式,该模式用于任务分配,通常在多阶段管道中,其中一个或几个节点将工作推送给许多工作线程,然后又将结果推送到一个或几个收集器。该模式大多是可靠的,因为它不会丢弃消息,除非节点意外断开连接。它是可扩展的,因为节点可以随时加入。
    • 协议:tcp/ip,底层nio、reator模式
      Push:push服务端socket
      LB:消息发推送绑定管道
      备注:当没有可用的对等方时,不应接受进一步的消息1c117d416d354df3b4160e8d1f0eb3b3.png
    • 协议:tcp/ip,底层nio、reator模式
      Pull:push服务端socket
      FQ:绑定入栈管道Pipe,接受push过来的消息
      备注:公平队列处理对等方推送数据1e4c74d3f0f947be9b62adabda20cbc1.png

      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值