`
东边日出西边雨
  • 浏览: 262767 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ZeroMQ 的模式

 
阅读更多

转载自:http://blog.codingnow.com/2011/02/zeromq_message_patterns.html

 

在需要并行化处理数据的时候,采用消息队列通讯的方式来协作,比采用共享状态的方式要好的多。Erlang ,Go 都使用这一手段来让并行任务之间协同工作。

最近读完了 ZeroMQ  Guide。写的很不错。前几年一直有做类似的工作,但是自己总结的不好。而 ZeroMQ 把消息通讯方面的模式总结的很不错。

ZeroMQ 并不是一个对 socket 的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层的点对点通讯模式。它有比 tcp 协议更高一级的协议。(当然 ZeroMQ 不一定基于 TCP 协议,它也可以用于进程间和进程内通讯。)它改变了通讯都基于一对一的连接这个假设。

ZeroMQ 把通讯的需求看成四类。其中一类是一对一结对通讯,用来支持传统的 TCP socket 模型,但并不推荐使用。常用的通讯模式只有三类。

  1. 请求回应模型。由请求端发起请求,并等待回应端回应请求。从请求端来看,一定是一对对收发配对的;反之,在回应端一定是发收对。请求端和回应端都可以是 1:N 的模型。通常把 1 认为是 server ,N 认为是 Client 。ZeroMQ 可以很好的支持路由功能(实现路由功能的组件叫作 Device),把 1:N 扩展为 N:M (只需要加入若干路由节点)。从这个模型看,更底层的端点地址是对上层隐藏的。每个请求都隐含有回应地址,而应用则不关心它。

  2. 发布订阅模型。这个模型里,发布端是单向只发送数据的,且不关心是否把全部的信息都发送给订阅端。如果发布端开始发布信息的时候,订阅端尚未连接上来,这些信息直接丢弃。不过一旦订阅端连接上来,中间会保证没有信息丢失。同样,订阅端则只负责接收,而不能反馈。如果发布端和订阅端需要交互(比如要确认订阅者是否已经连接上),则使用额外的 socket 采用请求回应模型满足这个需求。

  3. 管道模型。这个模型里,管道是单向的,从 PUSH 端单向的向 PULL 端单向的推送数据流。

任何分布式,并行的需求,都可以用这三种模型组合起来解决问题。ZeroMQ 只专注和解决了消息通讯这一基本问题,干的非常漂亮。

基于定义好的模型,我们可以看到,api 可以实现的非常简单易用。我们不再需要 bind/listen/accept 来架设服务器,因为这个模型天然是 1:N 而不是 1:1 的,不需要为每个通道保留一个句柄。我们也不必在意 server 是否先启动(bind),而后才能让 client 工作起来(connect)。

这以上模型中,关注的是通讯双方的职责,而不是实现的方式:监听端口还是连接对方端口。对于复杂的多进程协同工作的系统, 不必纠结于进程启动的次序(在我前几年设计的系统中,启动脚本写起来就非常麻烦)。

使用 ZeroMQ 不必在意底层实现是使用短连接还是长连接方式。ZeroMQ 中的 Transient (短暂) 和 Durable (持久) socket 也并非区别于实现层是否保持了 tcp 连接。而是概念上的不同。对于 Durable socket ,其生命期可以长于一个进程的生命期,即使进程退出,再次启动后依旧可以维持继续之前的 socket 。当然,这并不是帮助你挽救你的程序因出错而崩溃的。它只是提出这个模式,让你根据设计需要可以实现。对于 ZeroMQ ,如有需求(若内存有限),甚至把数据传输的 buffer 放到磁盘上。

分享到:
评论

相关推荐

    zeromq简易demo搭建(java版本)

    **深入理解ZeroMQ模式** ZeroMQ支持多种模式,包括PUB/SUB(发布/订阅)、REQ/REP(请求/响应)、DEALER/ROUTER(经销商/路由器)等。在上述示例中,我们使用了PUB/SUB模式,适合一对多的广播场景。在其他模式中,...

    zeromq_java.rar_java zeromq_libzmq.lib _zeromq_zeromq java

    压缩包中的 "zeromq_java" 文件很可能是包含Java项目的源代码,可能包含各种ZeroMQ模式的简单示例,如发布/订阅消息、请求/响应交互等。通过研究这些示例,开发者可以了解如何在实际项目中集成ZeroMQ,以实现高效的...

    zeromq 代理模式的一些问题

    标题提到的“zeromq 代理模式的一些问题”主要涉及到zeromq在代理(Proxy)模式下的工作原理、常见问题以及解决方案。 在zeromq中,代理模式(Proxy)是一种核心架构,它允许消息在多个网络节点之间进行路由。代理...

    zeromq中deale-route模式jave实现

    zeromq是一个强大的开源消息库,它提供了多种通信模式,如请求-响应(req-rep)、发布-订阅(pub-sub)、推拉(push-pull)以及我们这里关注的经销商-路由器(dealer-router)模式。在Java中使用zeromq,通常我们会...

    zer0mqXt:使用dotnet核心和C#键入安全的zeroMQ模式

    ZeroMQ提供了一种灵活的、基于模式的消息传递机制,包括发布/订阅(Pub/Sub)、请求/响应(Req/Rep)和推送/拉取(Push/Pull)等模式。这些模式使得不同进程间的通信变得简单,无需关心网络拓扑或者数据传输的细节。...

    zeromq的pub-sub订阅模式的jave实现

    zeromq是一个强大的开源消息库,它提供了多种消息模式,其中最常见的是发布/订阅(pub-sub)模式。在这个模式中,发布者(publisher)发送消息到一个主题,而订阅者(subscriber)则根据自己的兴趣选择接收特定主题...

    zeromq中负载均衡模式的jave实现

    zeromq是一个强大的开源消息库,它提供了多种模式来处理分布式系统中的通信问题。在本文中,我们将深入探讨zeromq中的"Dealer-Router"模式,并着重讲解如何使用Java实现负载均衡功能。此模式在Eclipse环境下通过...

    ZMQ/ZeroMQ使用手册

    手册目录:ZeroMQ基础、ZeroMQ进阶、高级请求-应答模式、可靠的请求-应答模式、高级发布-订阅模式。 ZMQ(ØMQ、ZeroMQ, 0MQ)看起来像是一套嵌入式的网络链接库,但工作起来更 像是一个并发式的框架。它提供的套接...

    C# zeromq 功能实现

    ZeroMQ,也被称为 ØMQ 或 0MQ,是一个高性能、轻量级的消息中间件,它提供了一种灵活的消息模式,可以用于构建分布式应用程序。在C#环境中,ZeroMQ提供了丰富的功能,允许开发人员轻松地实现高效的消息传递。本文将...

    ZeroMQ指南.pdf

    ZeroMQ提供了多种通信模式,包括请求-应答模式、发布-订阅模式、pipeline模式等,满足不同的应用场景。 ZeroMQ基础 ZeroMQ是一种基于消息队列的异步通信机制,它提供了一个灵活的、可靠的、可扩展的消息传递机制,...

    ZeroMq通讯模式

    详细描述ZeroMQ的通讯模式 希望可以帮助到大家

    golang实现zeromq的各种通讯模式

    使用的zeromq版本为:"github.com/pebbe/zmq4" 含有req-rep pub-sub push-pull router-dealer req-router dealer-rep loadbalance)(负载均衡)的实现

    zeromq的parallel-pipeline并行处理模式的jave实现

    zeromq是一个强大的开源消息库,它提供了多种消息传递模式,包括请求-响应、发布-订阅、推送-拉取以及本文将重点讨论的并行管道(parallel-pipeline)模式。在Java环境中,我们可以借助jeromq这个零MQ的Java绑定库来...

    zeromq中多线程的jave实现

    zeromq是一个强大的开源消息库,它提供了多种高级通信模式,包括发布/订阅、请求/应答、推送/拉取以及本文重点讨论的Dealer-Router模式。在Java中,我们通常使用jeromq这个库来操作zeromq,因为它是对zeromq原生API...

    ZeroMQ-云时代极速消息通信库

    ZeroMQ的核心设计理念是将传统的客户端-服务器模型转变为多对多的发布/订阅模式,以及请求/响应模式,这为开发者提供了更大的灵活性。它的设计目标是解决传统消息中间件的复杂性和性能问题,通过提供简单易用的API,...

    zeromq-4.3.2.zip

    4. **模式丰富**:ZeroMQ提供了四种主要的通信模式:PUB/SUB(发布/订阅)、REQ/REP(请求/响应)、DEALER/ROUTER(经销商/路由器)和PAIR(对等)模式,适应不同应用场景。 5. **可伸缩性**:ZeroMQ通过负载均衡和...

    ZEROmq实例

    2. **ZeroMQ模型**:ZeroMQ支持多种通信模式,包括PUB/SUB(发布/订阅)、REQ/REP(请求/响应)、DEALER/ROUTER(经销商/路由器)等,每种模式对应不同的应用场景。 3. **安装和配置**:在Windows环境下,我们需要...

    ZeroMQ4.3.4

    2. **灵活性**:支持多种消息模式,如发布/订阅(Publish/Subscribe),请求/响应(Request/Reply),推拉(Push/Pull),对等(Peer-to-Peer)等,适应不同应用场景。 3. **轻量级**:不需要中心服务器,节点间可以直接通信...

    zeromq手册源代码

    zeromq的套接字有四种主要类型:PUB(发布者)、SUB(订阅者)、REQ(请求者)、REP(应答者),以及一些更复杂的模式如DEALER(经销商)和ROUTER(路由器)等。这些模式覆盖了常见的消息传递场景,如请求-响应、...

    zeromq-3.2.5.zip

    zeromq的核心概念是消息代理模式,它允许开发者创建点对点、发布/订阅和请求/响应等不同的通信模式。这些模式使得zeromq在分布式系统和微服务架构中非常有用,因为它能处理复杂的异步通信,而无需编写大量的中间代码...

Global site tag (gtag.js) - Google Analytics