`
iyuan
  • 浏览: 474424 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

zeroMQ初体验-11.节点间的协作

    博客分类:
  • MQ
阅读更多
上一篇讲到了线程间的协作,通过zeroMQ的pair模式可以很优雅的实现。而在各节点间(进程级),则适用度不高(虽然也能用)。这里给出了两个理由:
1.节点间是可以调节的,而线程间不是(线程是稳定的),pair模式是非自动连接的.
2.线程数是固定的,可预估的。而节点则是变动、不可预估的。
由此得出结论:pair适用于稳定、可控的环境。

所以,有了本章节。不知诸位还记得前面所讲的发布/订阅模式,在那里曾说过这种模式是不太稳定的(主要是指初始阶段),容易在连接未建立前就发布、废弃部分数据。在这里,通过节点间的协作来解决那个难题。

模型图:


发布端:
import zmq

SUBSCRIBERS_EXPECTED = 2

def main():
    context = zmq.Context()
    
    publisher = context.socket(zmq.PUB)
    publisher.bind('tcp://*:5561')

    syncservice = context.socket(zmq.REP)
    syncservice.bind('tcp://*:5562')

    subscribers = 0
    while subscribers < SUBSCRIBERS_EXPECTED:
        msg = syncservice.recv()
        syncservice.send('')
        subscribers += 1
        print "+1 subscriber"
    
    for i in range(1000000):
       publisher.send('Rhubarb');

    publisher.send('END')

if name == 'main':
    main()


订阅端:
import zmq

def main():
    context = zmq.Context()
    
    subscriber = context.socket(zmq.SUB)
    subscriber.connect('tcp://localhost:5561')
    subscriber.setsockopt(zmq.SUBSCRIBE, "")

    syncclient = context.socket(zmq.REQ)
    syncclient.connect('tcp://localhost:5562')
    
    syncclient.send('')
    
    syncclient.recv()

    nbr = 0
    while True:
        msg = subscriber.recv()
        if msg == 'END':
            break
        nbr += 1
    
    print 'Received %d updates' % nbr

if name == 'main':
    main()


由上例可见,通过应答模式解决了之前的困扰,如果还不放心的话,也可以通过发布特定参数,当订阅端得到时再应答,安全系数便又升了一级。不过这里有个大前提,得先通过某种方式得到或预估一个概念数来确保应用的可用性。

(未完待续)
1
0
分享到:
评论
3 楼 iyuan 2011-12-09  
guozhiwei 写道
同redis的订阅发布服务和icestorm的订阅发布服务相比 zeromq的显得格外的不方便

redis什么的都用到了中间件缓存数据(话说回来好像都要的..)想象成udp,至于你收不收,反正我是发了..
2 楼 guozhiwei 2011-12-08  
同redis的订阅发布服务和icestorm的订阅发布服务相比 zeromq的显得格外的不方便
1 楼 guozhiwei 2011-12-07  
这样子的订阅发布没多大实际用处

相关推荐

    zeromq-2.1.7.tar.gz

    zeromq-2.1.7 是 ZeroMQ 的一个较早版本,ZeroMQ 是一个开源的消息中间件,它提供了一种高效、灵活的框架来构建分布式应用。在Linux环境中,ZeroMQ通过消息队列机制实现了进程间的通信,使得数据可以在不同程序之间...

    zeromq-3.2.5.tar.gz、jzmq.tar.gz、Python-2.6.6.tar.bz2、storm-0.8.0.zip下载

    这里提供的四个压缩包文件,Python-2.6.6.tar.bz2、zeromq-3.2.5.tar.gz、jzmq.tar.gz以及storm-0.8.0.zip,都是与Storm搭建和运行相关的资源。 首先,我们来详细了解一下每个文件的作用: 1. **Python-2.6.6.tar....

    zeromq-4.0.3.tar.gz.zip

    zeromq-4.0.3.tar.gz 是一个包含了 ZeroMQ 4.0.3 版本源代码的压缩文件。ZeroMQ,也被称为“零消息队列”或“0MQ”,是一个开源的消息中间件,它提供了一种高效、灵活且可扩展的方式来处理分布式系统中的数据通信。...

    zeromq-4.1.8.tar.gz

    标题中的"zeromq-4.1.8.tar.gz"指的是ZeroMQ的4.1.8版本的源代码包,通常以tar.gz格式压缩,这是一种在Linux和类Unix系统中常见的归档和压缩方式。 zeromq的核心特性包括点对点连接、发布/订阅模式、请求/响应模式...

    zeromq-2.1.9.tar.gz

    推送/拉取模式适合处理数据流,而对等模式则适用于节点间的协作。这些模式使得zeromq能够适应各种复杂的应用场景,比如分布式数据库、任务调度系统、实时数据处理等。 总结来说,`zeromq-2.1.9.tar.gz`是zeromq的一...

    zeromq-4.2.3.tar.gz

    zeromq-4.2.3.tar.gz 是ZeroMQ 4.2.3版本的源代码包,这个稳定版本确保了良好的兼容性和可靠性。 首先,让我们深入了解ZeroMQ的核心概念和功能: 1. **套接字(Sockets)**:在ZeroMQ中,套接字不仅仅是传统网络...

    zeromq-4.0.5-4.el7.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    zeromq-4.1.3.tar.gz

    zeromq-4.1.3 是一个针对 ZeroMQ 的特定版本的开发工具包,ZeroMQ 是一个开源的消息中间件库,它为分布式计算提供了一种高性能、轻量级的通信框架。ZeroMQ 提供了多种编程语言的绑定,使得开发者能够方便地在不同的...

    zeromq-4.3.4.tar.gz

    这个“zeromq-4.3.4.tar.gz”文件是0MQ库的4.3.4稳定版本,发布于2021年1月17日。下面我们将深入探讨0MQ的核心特性、主要功能以及如何使用这一版本。 1. **0MQ简介** - 0MQ不是一个传统的消息队列系统,而是一种在...

    zeromq-4.3.4.zip

    标题中的"zeromq-4.3.4.zip"指的是这个库的4.3.4版本的源代码压缩包。这个稳定版在2021年1月17日发布,意味着它是经过多轮测试和优化后的成熟版本,适合用于生产环境。 0MQ的核心特性包括: 1. **轻量级**:0MQ不...

    zeromq-4.2.0.tar.gz源码包

    在zeromq-4.2.0源码包中,你可以找到以下主要组成部分: 1. **源代码**:包含了zeromq的核心库和各种语言的绑定。核心库通常用C++编写,提供了跨平台的API,而绑定则允许开发者使用Python、Java、C#等其他语言与...

    zeromq-4.2.0.tar.zip

    标题中的"zeromq-4.2.0.tar.zip"是指ZeroMQ库的4.2.0版本,它被封装在一个ZIP压缩包中,而内部包含的文件是tar归档格式。ZeroMQ是一个开源的消息中间件,它提供了一个高级的消息队列模型,允许应用程序之间进行高效...

    zeromq-3.2.5.tar.gz

    ZeroMQ是一个网络通讯库,其主要用来为分布式应用程序开发提供进程间通信(此处的进程既可以是同一台机器上的两个进程也可以是不同机器上的两个进程)。ZeroMQ的特点在于灵活的通信手段和丰富的连接模型,并且它可以...

    zeromq-4.1.4.tar.gz

    ZeroMQ是一个网络通讯库,其主要用来为分布式应用程序开发提供进程间通信(此处的进程既可以是同一台机器上的两个进程也可以是不同机器上的两个进程)。ZeroMQ的特点在于灵活的通信手段和丰富的连接模型,并且它可以...

    zeromq-4.1.2.tar.gz

    ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。

    zeromq-3.12.5.zip

    零MQ是一种高效的消息队列库,它是Storm通信架构的核心组件,负责在集群中的不同节点间传递消息。 零MQ(ZeroMQ,也称为ØMQ或0MQ)是一个高性能、轻量级的多协议消息中间件,它提供了多种编程语言的API。在Storm中...

    zeromq-4.3.2.tar.gz

    当zeromq与msgpack结合时,可以快速地传输和解析数据,特别适合大数据量的传输,例如在分布式系统中的节点间通信。 zeromq的另一个优势在于它的可扩展性。通过编写插件,用户可以自定义消息的路由和处理方式,实现...

    zeromq-4.1.0-rc1.zip

    这个“zeromq-4.1.0-rc1.zip”压缩包包含了ZeroMQ 4.1.0版本的源代码,这是一个预发布版本(Release Candidate),意味着它是正式版发布前的最后一个测试版本。 ZeroMQ的核心概念是提供一种抽象的网络通信层,允许...

    zeromq-4.0.1.tar.gz

    5. **可扩展性**:ZeroMQ可以透明地处理网络故障和节点间的负载均衡,支持集群和分布式部署,从而实现高可用性和容错能力。 6. **安全性**:虽然ZeroMQ自身不直接提供安全加密,但可以通过结合使用其他安全协议(如...

    Win64-ZeroMQ-JZMQ-CZMQ.zip

    VS2015 在Widows 10 上编译的 ZeroMQ 4.3.2,JZMQ 3.1 CZMQ 4.2,可以在 JDK 1.8 下运行。DLL 都是 64位,包含了编译及运行相关信息。分享一下,也给自己留个备份

Global site tag (gtag.js) - Google Analytics