Pub/Sub pattern 发布/订阅模式
发布订阅模式:发布方不用管理发布给哪个订阅方(看到这句话感觉不太好),有2种场景
场景2比较常见,多客户端向一个服务端订阅,场景1类似与REP/REQ的多服务器模式,避免单个PUB撑不住,(2个PUB的数据都能收到)
pub-server.py
port = '5556' pub_server_name = 'pub-server01' context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind('tcp://*:%s'%port) while True: topic = random.randrange(9999,10005) messagedata = random.randrange(1,215)-80 print 'topic:%s messagedata:%s'%(topic,messagedata) socket.send('%d %d %s'%(topic,messagedata,pub_server_name)) time.sleep(1)
随机发送主题为9999-10005的数据
sub-client.py
#coding=utf-8 import sys import zmq port = "5556" if len(sys.argv) > 1: port = sys.argv[1] int(port) if len(sys.argv) > 2: port1 = sys.argv[2] int(port1) # Socket to talk to server context = zmq.Context() socket = context.socket(zmq.SUB) print "Collecting updates from weather server..." socket.connect ("tcp://localhost:%s" % port) if len(sys.argv) > 2: socket.connect ("tcp://localhost:%s" % port1) # 本地过滤 topicfilter = "10001" socket.setsockopt(zmq.SUBSCRIBE, topicfilter) # Process 5 updates total_value = 0 for update_nbr in range (5): string = socket.recv() topic, messagedata,pub_server_name = string.split() total_value += int(messagedata) print topic, messagedata,pub_server_name print "Average messagedata value for topic '%s' was %dF" % (topicfilter, total_value / update_nbr)
客户端只接收主题为10001的数据
PUB输出:
topic:10003 messagedata:7 topic:10000 messagedata:-27 topic:10000 messagedata:37 topic:10001 messagedata:-11 topic:10001 messagedata:-14 topic:9999 messagedata:38
client输出:
10001 -11pub-server01 10001 -14 pub-server01
另外:PUB/SUB是异步的,谁先开后开都行,就是说如果PUB已经开起来发送数据,然后SUB端起来,那么之前的那些数据SUB就收不到了,PUB和SUB逻辑上可以说是解耦的,二者不互相依赖。
最后是要点:
1.PUB未与SUB有逻辑上的连接,所以PUB可以很简单的drop掉数据(意思就是只管发)
2.如果你用的是TCP,然后SUB端要搞点什么比较慢,数据会Queue在PUB那头
3. 目前版本(最新版) filter(就是主题过滤)是在SUB端的,不是在PUB端,就是说SUB端比较苦逼,要全部收下一堆数据,再慢慢挑,这好像太那个了吧^_^
相关推荐
springboot+activemq, 用代码讲解了activemq的2中处理模式:PTP与PUB/SUB, 具体讲解已经在文章中介绍过了
简单的WCF发布-订阅(Pub/Sub)服务的例子
完整的代码,使用vs2015创建。通过一个64位StackExchange.Redis.dll(开源,1.2.6版),创建客户端,管理和使用Redis的PUB/SUB功能,适合集成进项目使用。 (需正常配置Redis客户端后才可使用)
Abstract—Publish/Subscribe (Pub/Sub) systems are the middleware which provides the distributed event detection. The increasing requirements from applications have driven Pub/Sub systems to ...
dtalk就是为了实现上述的目标而开发的一个Redis发布订阅(pub/sub)系统实现的前端设备控制框架,在dtalk框架上,Redis服务器用于提供中转服务。前端设备通过订阅特定的频道接收管理发送的请求消息,执行对应的功能。...
redis-spring-pub_sub
个人对MQ7.0的研究及MQ7.0发布预定功能的一些尝试
网上关于opcua的demo 具体介绍参见:http://t.csdn.cn/WMEW9 原地址:https://www.kalycito.com/how-to-run-opc-ua-pubsub-tsn/
NULL 博文链接:https://shift-alt-ctrl.iteye.com/blog/1867454
Pulsar是一个分布式pub-sub消息传递平台,具有非常灵活的消息传递模型和直观的客户端API。
它着重于高性能和可用性,并实现了发布-订阅模式和主题概念。 Concepts Eventhub是用现代C ++编写的WebSocket消息代理。 它着重于高性能和可用性,并实现了发布-订阅模式和主题概念。 概念主题主题是将消息发布到的...
订阅模式:PUB(服务器)/SUB(客户端) 一个简单的代码示例包含以下内容: 1. 智能指针的使用 2. 线程的使用 3. zmq的使用 这种服务即服务器会不停发送数据,然后客户端对其进行订阅,客户端会收到服务器发送的数据...
Iodine是用于实时Ruby应用程序的快速并发Web应用程序服务器,具有对WebSockets和Pub / Sub服务的本地支持-但它还有更多。 Iodine是许多facil.io C框架的Ruby包装器,利用C的速度来完成许多常见的Web应用程序任务。 ...
使用Redis Pub / Sub + socket.io基于Node.js进行聊天基于简单的应用程序,以显示Redis Pub / Sub机制以及Node.js和socket.io。如何使应用程序运行必须已安装并正在运行。 必须安装 npm安装npm运行redis或npm运行套...
Pub/Sub 这是一组简单的脚本,用于简单地演示使用 Google Cloud Pub/Sub 的发布/订阅。 此代码将从 Google Cloud Storage 存储桶中读取数据,进行一些文本处理,并将消息写入 Google Cloud Pub/Sub。 正如标题所示,...
zeromq的pub-sub订阅模式的jave实现,Eclipse下的maven工程,相关引用已在pom文件引入,可以直接运行。
消费形式的不同造成JMS有两组平行的API,这就是JMS的PTP(point to point)模型和PUB/SUB(publisher和subscriber、出版和订阅)模型。PTP的消息应用中一个消息只有一个消费者,消费后该消息即不再有效。而PUB/SUB...
Redis命令参考手册完整版 又不懂得可以@我 一起学习开发交流redis redis的强大之处 redis 消息推送(基于分布式 pub/sub)多用于实时性较高的消息推送,并不保证可靠。 其他的mq和kafka保证可靠但有一些延迟(非实时...
用于管理hiredis中pub\sub,包含pub\sub常用的函数定义,已经对其返回值有较好的接收处理。
适用于Google Cloud Pub / Sub连接器。 可以在找到文档。 该项目提供: BroadwayCloudPubSub.Producer持续接收来自发布/订阅订阅的消息的GenStage生产者在成功处理之后对其进行确认。 BroadwayCloudPubSub....