ZeroMQ——一个轻量级的消息通信组件

ZeroMQ是一个轻量级的消息通信组件,尽管名字中包含了"MQ",严格上来讲ZeroMQ并不是"消息队列/消息中间件"。ZeroMQ是一个传输层API库, 更关注消息的传输。与消息队列相比,ZeroMQ有以下一些特点:

点对点无中间节点

传统的消息队列都需要一个消息服务器来存储转发消息。而ZeroMQ则放弃了这个模式,把侧重点放在了点对点的消息传输上,并且(试图)做到极致。以为消息服务器最终还是转化为服务器对其他节点的点对点消息传输上。ZeroMQ能缓存消息,但是是在发送端缓存。ZeroMQ里有水位设置的相关接口来控制缓存量。当然,ZeroMQ也支持传统的消息队列(通过zmq_device来实现)。

强调消息收发模式

在点对点的消息传输上ZeroMQ将通信的模式做了归纳,比如常见的订阅模式(一个消息发多个客户),分发模式(N个消息平均分给X个客户)等等。下面是目前支持的消息模式配对,任何一方都可以做为服务端。 非常灵活。

?以统一接口支持多种底层通信方式

不管是线程间通信,进程间通信还是跨主机通信,ZeroMQ都使用同一套API进行调用,只需要更改通信协议名称(如,从"ipc:///xxx"改为"tcp://...:****")即可。它提供了如下四种类型的传输协议:

  • TCP: 在主机之间进行通讯
  • INROC: 在同一进程的线程之间进行通讯(线程间)
  • IPC : 同一主机的进程之间进行通讯
  • PGM: 多播通讯

?异步,强调性能

ZeroMQ设计之初就是为了高性能的消息发送而服务的,所以其设计追求简洁高效。它发送消息是异步模式,通过单独出一个IO线程来实现。它的性能往往令其他消息队列框架难以望其项背。

学习文档:

如下两篇C#的入门文档介绍得还不错,这里推荐一下。

  1. CodeProject上有一篇文章非常不错:ZeroMQ via C#: Introduction,国内也有该文的译文:通过C#使用ZeroMQ
  2. 这篇Blog也介绍得非常通俗易懂新世紀通訊函式庫 – ZeroMQ
  3. 官方文档ZeroMQ Guide也有比较详尽的中文版本,CSDN上也有下载的:点击下载
时间: 2024-10-14 12:40:43

ZeroMQ——一个轻量级的消息通信组件的相关文章

ZeroMQ——一个轻量级的消息通信组件 C#

ZeroMQ——一个轻量级的消息通信组件 ZeroMQ是一个轻量级的消息通信组件,尽管名字中包含了"MQ",严格上来讲ZeroMQ并不是"消息队列/消息中间件".ZeroMQ是一个传输层API库, 更关注消息的传输.与消息队列相比,ZeroMQ有以下一些特点: 点对点无中间节点 传统的消息队列都需要一个消息服务器来存储转发消息.而ZeroMQ则放弃了这个模式,把侧重点放在了点对点的消息传输上,并且(试图)做到极致.以为消息服务器最终还是转化为服务器对其他节点的点对点

使用内存映射开发高性能进程间消息通信组件

一.背景 项目开发中免不了各模块或系统之间进行消息通信,目前热门的消息中间件有Redis.RabbitMQ.Kafka.RocketMQ等等. 以上几种组件中Redis在消息队列方面表现还可以,但是如果涉及发布订阅功能,就不行了,最近项目就使用了redis的发布订阅, 每秒只能发出几千条,虽然目前绰绰有余,但是瓶颈可以预期. 其余的几种都是比较重量级的消息中间件,什么跨平台.分布式.集群.支持N种协议等等,很高大全, 我们可能就只使用了其中1.2个功能.严格来说,项目中集成这几种MQ的工作量是不

基于.NET 框架的 通信组件ZMQ完整教程-总目录

ZMQ是一个比较轻量级的消息通信组件,引用官方的说法: "ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程更加简单.简洁和性能更高.是一个消息处理队列库,可在多个线程.内核和主机盒之间弹性伸缩.ZMQ 的明确目标是"成为标准网络协议栈的一部分,之后进入 Linux 内核".现在还未看到它们的成功.但是,它无疑是极具前景的.并且是人们更加需要的"传统"BSD 套接字

消息通信库ZeroMQ 4.0.4安装指南

消息通信库ZeroMQ 4.0.4安装指南 一.ZeroMQ介绍 ZeroMQ是一个开源的消息队列系统,按照官方的定义,它是一个消息通信库,帮助开发者设计分布式和并行的应用程序. 首先,我们需要明白,ZeroMQ不是传统的消息队列系统(比如ActiveMQ.WebSphereMQ.RabbitMQ等).ZeroMQ可以帮助我们建立自己的消息队列系统,它只是一个库.ZeroMQ可以运行于带x86处理器或ARM处理器的机器上,支持40多种编程语言. 消息队列,从技术的角度来讲,是以先进先出FIFO算

[UWP]实现一个轻量级的应用内消息通知控件

在UWP应用开发中,我们常常有向用户发送一些提示性消息的需求.这种时候我们一般会选择MessageDialog.ContentDialog或者ToastNotification来完成功能. 但是,我们大多数时候仅仅是需要在应用内向用户显示一条提示消息(例如"登录成功!"),不需要用户对这条消息做出处理,在这种情况下这几种方法都不算是很好的解决方式,它们不够轻量,也不够优雅,甚至会阻断用户的当前操作,这是我们所不期望的. 如果有安卓平台开发经验的开发者,可能会想到Toast组件.对,为什

WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(二)实现IRequestChannel(2016-03-15 12:35)

从今天开始,一步步介绍我是如何实现自定义的ZeroMQ绑定和protocolBuffer消息编码的. 本系列的想法主要来源于蒋金楠Artech的系列博客-WCF后续之旅,和WCF开发团队成员carlosfigueira的WCF Extension系列博客. 首先要明确的是,通信和编码的实现是分离的.WCF也是这样设计的.自定义Binding包含BindingElementCollection集合,这个集合可以添加多个ElementBinding.但是有两个ElementBinding必不可少,T

一个轻量级分布式RPC框架--NettyRpc

1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC框架.花了一些时间看了下他的代码,写的干净简单,写的RPC框架可以算是一个简易版的dubbo.这个RPC框架虽小,但是麻雀虽小,五脏俱全,有兴趣的可以学习一下. 项目地址:https://github.com/luxiaoxun/NettyRpc 自己花了点时间整理了下代码,并修改一些问题,以下是自己学习的一

IOTutility 一个轻量级的 IOT 基础操作库

目录 IOTutility 一个轻量级的 IOT 基础操作库 1. 为什么要写一个 IOT 编程库? 2. IOTutility 具有什么功能? 3. IOTutility 有什么特点 IOTutility 实现了哪些功能 MQTT protocol implement MQTT 实现 1. 创建一个 MQTT_Session 2. 连接到服务器 3. 订阅感兴趣的主题 4. 可以通过 Publish 接口直接上传消息给服务器 如何使用 1. 下载代码 2. 编译代码库 3. 编译示例程序并执行

[开源] gnet: 一个轻量级且高性能的 Golang 网络库

Github 主页 https://github.com/panjf2000/gnet 欢迎大家围观~~,目前还在持续更新,感兴趣的话可以 star 一下暗中观察哦. 简介 gnet 是一个基于 Event-Loop 事件驱动的高性能和轻量级网络库.这个库直接使用 epoll 和 kqueue 系统调用而非标准 Golang 网络包:net 来构建网络应用,它的工作原理类似于两个开源的网络库:libuv 和 libevent. 这个项目存在的价值是提供一个在网络包处理方面能和 Redis.Hap