文档章节

(转)ZeroMQ的模式-Publish-Subscribe

DEC_LIU
 DEC_LIU
发布于 2013/09/06 14:47
字数 610
阅读 252
收藏 2

Publish-subscribe Pattern:发布订阅模式。

现实中,并不是所有请求都期待答复,而不期待答复,自然就没有了状态。所以相对于REQ-REP,PUB-SUB模式容易理解也简单得多。广播听过吧?收音机用过吧?就这个意思。

相应地,该模式下的socket也就两种:ZMQ_PUB & ZMQ_SUB。 分别对应电台和收音机。

ZMQ_PUB

ZMQ_PUB主要用来让消息发布者用来散发消息的。所有连接上的peer都能收到由它散发的消息。 zmq_recv(3) 这个API是不能用在这个socket上的,原因显而易见。而zmq_send作用在该socket上时是永远不会阻塞的,如果订阅者异常,发出的消息则会被丢弃。

Summary of ZMQ_PUB characteristics
Compatible peer sockets ZMQ_SUB
Direction Unidirectional
Send/receive pattern Send only
Incoming routing strategy N/A
Outgoing routing strategy Fan out
ZMQ_HWM option action Drop

ZMQ_SUB

很明显,订阅者通过这个socket来接受发布者发布的消息。需要注意的是,在使用该socket时,必须显式地调用zmq_setsockopt ,设置ZMQ_SUBSCRIBE和filter。如果不设置的话,是收不到任何消息的。

Summary of ZMQ_SUB characteristics
Compatible peer sockets ZMQ_PUB
Direction Unidirectional
Send/receive pattern Receive only
Incoming routing strategy Fair-queued
Outgoing routing strategy N/A
ZMQ_HWM option action Drop

总结

PUB-SUB模式一般处理的都不是系统的关键数据。发布者不关注订阅者是否收到发布的消息,订阅者也不知道自己是否收到了发布者发出的所有消息。你也不知道订阅者何时开始收到消息。因此逻辑上,它都不是可靠的。

事实上,即便你先启动订阅者,再启动发布者。订阅者也不一定能收到所有的消息。原因在于:发布者已启动就开始撒布消息,而这时订阅者可能还没有完成 连接。如果一定需要保证,则需要做两者的同步。最傻的方法就是让发布者启动之后sleep一会儿再开始发消息,不过这种方式就跟听起来一样不靠谱。

一个订阅者可以订阅多个发布者。同时订阅者通过filter来过滤自己需要的消息,需要注意的时,filter是在订阅端起作用的。也就是说所有消息是会到达所有订阅者处,订阅者根据filter丢掉自己不需要的消息。

本文转载自:

DEC_LIU
粉丝 27
博文 18
码字总数 9469
作品 0
浦东
架构师
私信 提问
高性能的通讯库-zeroMQ的几个高性能特征

这两天研究了一下zeroMQ,号称史上最好的通讯库,比rabbitMQ快很多,基于c语言开发的,实时流处理sorm的task之间的通信就是用的zeroMQ。 zeroMQ在使用模式上支持多种,有req-reply,publish...

天下杰论
2014/10/08
510
0
使用 ZeroMQ 实现分布式消息系统

“分布式系统是你甚至不知道的一台计算机上的故障可以使您自己的计算机不可用。”-Leslie Lamport 随着云计算的普及和可用性,分布式系统架构已很大程度上取代了更多的整体构建。当然,使用面...

oschina
2015/05/11
20.8K
21
[架构] ZeroMQ 深度探索(一)

序 最初认识 ZeroMQ 是被它的名号所吸引,最近在一个高性能中间件的项目中用到了 ZeroMQ,对这个号称“史上最快的消息队列”有了更深层次的了解。如果我们仅仅把 ZeroMQ 看作是一个消息队列,...

长平狐
2013/07/01
8.1K
0
[架构] ZeroMQ 深度探索(二)

在上一篇《 ZeroMQ 深度探索(一)》中,我们使用 ZeroMQ 完成了基本的“请求-响应”模式,这个例子是基于 TCP 协议的,用法和原生的 Socket API 也差不多,都是“初始化、绑定或连接、发送、...

长平狐
2013/07/01
6.7K
2
AAuto v1.1.21 同时支持ZeroMQ与Protobuf

ZeroMQ网络库提供一些跨多种传输协议(如进程内通讯、IPC、TCP和广播)的套接字供你使用,可使用多种方式实现N对N的套接字连接。ZeroMQ非常适合与Protobuf结合使用,并且与Protobuf一样在很多...

qqmmcc
2011/11/20
2.1K
1

没有更多内容

加载失败,请刷新页面

加载更多

shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
4
0
微服务架构依赖图

基于spring-cloud-alibaba + dubbo

龙影
昨天
5
0
Centos7 安装zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-2.el6.noarch.rpm 可以到https://repo.zabbix.com/zabbix找到对应的版本 yum install zabbix-agent -y 出现E......

abowu
昨天
8
0
文本编辑器GNU nano 4.4 发布

GNU nano 4.4 "Hagelslag" 更新日志: 启动时,光标可以放在第一个或最后一个出现位置 字符串前面带有+/string 或 +?string的字符串。 发生自动硬包装时((--breaklonglines),任何前导引号...

linuxCool
昨天
7
0
你知道字节序吗

字节序 最近在调一个自定义报文的接口时,本来以为挺简单的,发现踩了好几个坑,其中一个比较“刻骨铭心”的问题就是数据的字节序问题。 背景 自定义报文,调用接口,服务端报文解析失败 iO...

杭城小刘
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部