在上一节中已经提到XREP主要工作是包装数据,打上标记以便方便的传递数据。那么,换个角度来看,这不就是路由么!其实在
优雅的扩展中有介绍过。在这里针对XREP模式做深入的探索。
首先,得要理一下其中几种类型的差别(相似的名字真是坑爹啊):
REQ,官网称之为"老妈类型",因为它负责主动提出请求,并且要求得到答复(严格同步的)
REP,"老爸类型",负责应答请求,(从不主动,也是严格同步的)
XREQ,"分销类型",负责对进出的数据排序,均匀的分发给接入的REP或者XREP
XREP,"路由类型",将信息转发至任何与他有连接的地方,可以和任何类型相连,不过看起来,天然的和老妈比较亲密。
传统的看法是,应答模式自然得同步的。不过在这里,显然是可以做到异步的(只要"老爸"或者"老妈"不处在整个线路的中间位置).
通常定制路由会用到以下四种通迅连接:
XREP-to-XREQ.
XREP-to-REQ.
XREP-to-REP.
XREP-to-XREP.
在这几种基本连接下,定制路由完全看各人的想象力了。不过在即将到来的各种通讯的详解前,还是得要申明一下:
自定义路由有风险,使用需谨慎啊!
首先要介绍的是XREP-XREQ模式:
这是比较简单的一种模式,XREQ会用到三种情景:1,汇总,2,代理分发,3,响应答复。
这里要注意,如果XREQ用于响应答复,最好只有一个XREP与它相连,因为XREQ不会指定发送目标,而会将数据均衡的摊派给所有与它有连接关系的XREP.
这里给出一个汇总式的例子:
import time
import random
from threading import Thread
import zmq
def worker_a(context):
worker = context.socket(zmq.XREQ)
worker.setsockopt(zmq.IDENTITY, 'A')
worker.connect("ipc://routing.ipc")
total = 0
while True:
request = worker.recv()
finished = request == "END"
if finished:
print "A received:", total
break
total += 1
def worker_b(context):
worker = context.socket(zmq.XREQ)
worker.setsockopt(zmq.IDENTITY, 'B')
worker.connect("ipc://routing.ipc")
total = 0
while True:
request = worker.recv()
finished = request == "END"
if finished:
print "B received:", total
break
total += 1
context = zmq.Context()
client = context.socket(zmq.XREP)
client.bind("ipc://routing.ipc")
Thread(target=worker_a, args=(context,)).start()
Thread(target=worker_b, args=(context,)).start()
time.sleep(1)
for _ in xrange(10):
if random.randint(0, 2) > 0:
client.send("A", zmq.SNDMORE)
else:
client.send("B", zmq.SNDMORE)
client.send("This is the workload")
client.send("A", zmq.SNDMORE)
client.send("END")
client.send("B", zmq.SNDMORE)
client.send("END")
time.sleep(1) # Give 0MQ/2.0.x time to flush output
传递的数据结构:
因为这是无应答的,比较简单,如果要应答的话,会稍微麻烦些,需要用到前面讲的POLLl来调度。在代码中有一行sleep,主要是为了等待接收端准备就绪,否则有可能像"发布/订阅"那样,丢失数据。除了XREP与PUB外,其他类型都不会存在这种问题(都会阻塞等待)。
注意:
在路由模式下,永远是不安全的,想要得到保障,就应该在得到路由信息时答复路由(回应一下)。
(未完待续)
分享到:
相关推荐
zeromq-2.1.7 是 ZeroMQ 的一个较早版本,ZeroMQ 是一个开源的消息中间件,它提供了一种高效、灵活的框架来构建分布式应用。在Linux环境中,ZeroMQ通过消息队列机制实现了进程间的通信,使得数据可以在不同程序之间...
这里提供的四个压缩包文件,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 是一个包含了 ZeroMQ 4.0.3 版本源代码的压缩文件。ZeroMQ,也被称为“零消息队列”或“0MQ”,是一个开源的消息中间件,它提供了一种高效、灵活且可扩展的方式来处理分布式系统中的数据通信。...
标题中的"zeromq-4.1.8.tar.gz"指的是ZeroMQ的4.1.8版本的源代码包,通常以tar.gz格式压缩,这是一种在Linux和类Unix系统中常见的归档和压缩方式。 zeromq的核心特性包括点对点连接、发布/订阅模式、请求/响应模式...
1. **解压**:使用`tar -zxvf zeromq-4.2.3.tar.gz`命令解压文件。 2. **配置**:进入解压后的目录,运行`./configure`以检测系统并生成Makefile。 3. **编译**:执行`make`命令来编译源代码。 4. **安装**:使用`...
`zeromq-2.1.9.tar.gz` 是zeromq的一个特定版本,即2.1.9版,通常以源码形式提供,需要通过编译来安装。 首先,让我们深入了解zeromq的核心概念。zeromq设计了一个灵活的套接字模型,它允许开发者构建复杂的网络...
这个“zeromq-4.3.4.tar.gz”文件是0MQ库的4.3.4稳定版本,发布于2021年1月17日。下面我们将深入探讨0MQ的核心特性、主要功能以及如何使用这一版本。 1. **0MQ简介** - 0MQ不是一个传统的消息队列系统,而是一种在...
zeromq-4.1.3 是一个针对 ZeroMQ 的特定版本的开发工具包,ZeroMQ 是一个开源的消息中间件库,它为分布式计算提供了一种高性能、轻量级的通信框架。ZeroMQ 提供了多种编程语言的绑定,使得开发者能够方便地在不同的...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
3. **模式丰富**:支持多种消息模式,如发布/订阅、请求/应答、推送/拉取和一对多等,这些模式可以灵活地组合以适应不同的应用场景。 4. **高可用性**:具有消息持久化和负载均衡功能,确保在故障情况下仍能保持...
zeromq的设计基于发布/订阅(Pub/Sub)、请求/应答(Req/Rep)和推送/拉取(Push/Pull)等经典的消息模式。这些模式覆盖了各种常见的分布式系统通信场景,如服务间调用、事件驱动架构、工作队列等。通过这些模式,...
标题中的"zeromq-4.2.0.tar.zip"是指ZeroMQ库的4.2.0版本,它被封装在一个ZIP压缩包中,而内部包含的文件是tar归档格式。ZeroMQ是一个开源的消息中间件,它提供了一个高级的消息队列模型,允许应用程序之间进行高效...
综上所述,“zeromq-4.1.0-rc1.zip”压缩包中的源代码提供了ZeroMQ的一个关键版本,开发者可以深入了解其内部机制,根据项目需求进行定制或扩展。对于想要构建分布式系统,特别是对性能和灵活性有高要求的项目来说,...
ZeroMQ是一个网络通讯库,其主要用来为分布式应用程序开发提供进程间通信(此处的进程既可以是同一台机器上的两个进程也可以是不同机器上的两个进程)。ZeroMQ的特点在于灵活的通信手段和丰富的连接模型,并且它可以...
ZeroMQ是一个网络通讯库,其主要用来为分布式应用程序开发提供进程间通信(此处的进程既可以是同一台机器上的两个进程也可以是不同机器上的两个进程)。ZeroMQ的特点在于灵活的通信手段和丰富的连接模型,并且它可以...
ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。
在Linux环境下,zeromq-4.3.2.tar.gz可以通过编译源代码进行安装。通常,这涉及到解压、配置、编译和安装几个步骤。用户需要确保系统上已经安装了必要的构建工具,如GCC、make和必要的依赖库。安装过程可能如下: `...
zeromq-3.12.5.tar.gz, libzmq-3.1.2.tar.gz 在Linux环境中,构建和部署分布式计算系统时,Storm是一个常用的选择,它是一个开源的流处理框架,用于实时数据处理。这个压缩包"zeromq-3.12.5.zip"包含了与Storm集群...
1. **解压**:使用tar命令解压文件,例如`tar -zxvf zeromq-4.0.1.tar.gz`。 2. **配置**:进入解压后的目录,使用`./configure`命令进行配置,检查系统环境和依赖。 3. **编译**:执行`make`命令进行编译。 4. **...
VS2015 在Widows 10 上编译的 ZeroMQ 4.3.2,JZMQ 3.1 CZMQ 4.2,可以在 JDK 1.8 下运行。DLL 都是 64位,包含了编译及运行相关信息。分享一下,也给自己留个备份