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端比较苦逼,要全部收下一堆数据,再慢慢挑,这好像太那个了吧^_^
相关推荐
总结来说,ActiveMQ的PTP和PUB/SUB模式提供了灵活的消息处理方式,适应不同的业务场景。SpringBoot通过其强大的依赖注入和自动配置能力,使得与ActiveMQ的集成变得简单易行。开发者可以根据实际需求选择合适的消息...
完整的代码,使用vs2015创建。通过一个64位StackExchange.Redis.dll(开源,1.2.6版),创建客户端,管理和使用Redis的PUB/SUB功能,适合集成进项目使用。 (需正常配置Redis客户端后才可使用)
在本实践中,我们将深入探讨 Redis 的发布订阅(pub/sub)功能,这是一种轻量级的通信模式,允许发送者(publisher)向多个接收者(subscriber)广播消息,而无需直接了解彼此。 首先,让我们理解 Redis pub/sub 的...
简单的WCF发布-订阅(Pub/Sub)服务的例子
基于Redis 发布订阅(pub/sub)机制设计,源码包含270个文件,涵盖119个Java源文件、61个PNG图片文件、21个Shell脚本文件、20个批处理文件、8个XML配置文件、7个属性文件、6个JPG图片文件、5个JavaScript文件、5个HTML...
基于Redis发布订阅(pub/sub)系统实现的前端设备控制框架(java)。在基于物联网的应用中,各种前端设备需要能被远程管理,当所有的设备都能直接通过ip地址访问时,设计设备管理系统时,只需要把前端设备当作一个简单的...
MQ7.0是IBM消息队列(Message Queue)的一个重要版本,相较于MQ6.1,它引入了许多新特性和改进,特别是在发布/订阅(pub/sub)功能方面。发布/订阅是一种异步消息传输机制,允许应用程序(发布者)在不关心具体接收...
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 ...
标题 "redis-spring-pub_sub" 暗示了我们关注的是如何在Spring框架中使用Redis作为发布/订阅(pub/sub)消息系统。这个主题涵盖了两个主要方面:Redis的发布/订阅功能和Spring对它的集成。 Redis是一个高性能的键值...
dtalk就是为了实现上述的目标而开发的一个Redis发布订阅(pub/sub)系统实现的前端设备控制框架,在dtalk框架上,Redis服务器用于提供中转服务。前端设备通过订阅特定的频道接收管理发送的请求消息,执行对应的功能。...
网上关于opcua的demo 具体介绍参见:http://t.csdn.cn/WMEW9 原地址:https://www.kalycito.com/how-to-run-opc-ua-pubsub-tsn/
其中,`Pub/Sub(发布/订阅)`是Redis提供的一种消息通信模式,它允许发送者(Publisher)发送消息到频道(Channel),而多个订阅者(Subscriber)可以同时监听并接收这些消息。在本案例中,我们关注的是`hiredis`库...
订阅模式:PUB(服务器)/SUB(客户端) 一个简单的代码示例包含以下内容: 1. 智能指针的使用 2. 线程的使用 3. zmq的使用 这种服务即服务器会不停发送数据,然后客户端对其进行订阅,客户端会收到服务器发送的数据...
它着重于高性能和可用性,并实现了发布-订阅模式和主题概念。 Concepts Eventhub是用现代C ++编写的WebSocket消息代理。 它着重于高性能和可用性,并实现了发布-订阅模式和主题概念。 概念主题主题是将消息发布到的...
Apache Pulsar是一款高度可扩展、高性能的分布式发布订阅(pub-sub)消息系统,由Apache Software Foundation维护。作为下一代消息中间件,Pulsar旨在解决传统消息队列系统的局限性,提供更强大的功能和更高的吞吐量...
Iodine是用于实时Ruby应用程序的快速并发Web应用程序服务器,具有对WebSockets和Pub / Sub服务的本地支持-但它还有更多。 Iodine是许多facil.io C框架的Ruby包装器,利用C的速度来完成许多常见的Web应用程序任务。 ...
Redis是一种高性能的键值数据库,特别适合用于构建实时消息系统,因为它的发布/订阅(pub/sub)模式可以实现实时数据传输。在这个系统中,发布者(pub)发送消息到特定的主题(channel),而订阅者(sub)可以监听并...
它支持多种协议,如TCP、IPC、PUB/SUB、REQ/REP等,可以很好地处理高并发和大规模网络通信。 在Java中,我们通常使用jeromq作为zeromq的实现,因为它是官方zeromq库的Java绑定。jeromq提供了与C++版本zeromq接口...
使用Redis Pub / Sub + socket.io基于Node.js进行聊天基于简单的应用程序,以显示Redis Pub / Sub机制以及Node.js和socket.io。如何使应用程序运行必须已安装并正在运行。 必须安装 npm安装npm运行redis或npm运行套...
Java中的Google PubSub 该项目以简单的方式显示了如何使用Java实现Google PubSub。安装该项目正在使用Java 16,但是您至少...4 - Run PublishToTopic.5 - Done!您可以参考以了解有关发布者/订阅者之间关系的更多信息。