ZeroMQ自查手册

简介

ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ 的明确目标是“成为标准网络协议栈的一部分,之后进入 Linux 内核”。现在还未看到它们的成功。但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD 套接字之上的一层封装。ZMQ 让编写高性能网络应用程序极为简单和有趣。

ZgrBBd.jpg

RabbitMQ是一个AMQP实现,传统的messaging queue系统实现,基于Erlang。老牌MQ产品了。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量还在其次。

Kafka是linkedin开源的MQ系统,主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,0.8开始支持复制,不支持事务,适合产生大量数据的互联网服务的数据收集业务。

ZeroMQ只是一个网络编程的Pattern库,将常见的网络请求形式(分组管理,链接管理,发布订阅等)模式化、组件化,简而言之socket之上、MQ之下。对于MQ来说,网络传输只是它的一部分,更多需要处理的是消息存储、路由、Broker服务发现和查找、事务、消费模式(ack、重投等)、集群服务等。

综上所述,Zeromq 并不是类似Rabbitmq消息列队,它实际上只一个消息列队组件,一个库。

Zeromq的几种模式

Request-Reply模式:

客户端在请求后,服务端必须回响应
ZgU6Qs.png

Python实现:
server端:

# -*- coding=utf-8 -*-
import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:
    message = socket.recv()
    print("Received: %s" % message)
    socket.send("I am OK!")

client端:

# -*- coding=utf-8 -*-

import zmq
import sys

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")

socket.send('Are you OK?')
response = socket.recv();
print("response: %s" % response)

输出:

$ python app/server.py 
Received: Are you OK?

$ python app/client1.py 
response: I am OK!

Publish-Subscribe模式:

广播所有client,没有队列缓存,断开连接数据将永远丢失。client可以进行数据过滤。

ZgUrWQ.png

Python实现
server端:

# -*- coding=utf-8 -*-
import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5555")

while True:
    print('发送消息')
    socket.send("消息群发")
    time.sleep(1)    

client端1:

# -*- coding=utf-8 -*-

import zmq
import sys

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5555")
socket.setsockopt(zmq.SUBSCRIBE,'')  # 消息过滤
while True:
    response = socket.recv();
    print("response: %s" % response)

client端2:

# -*- coding=utf-8 -*-

import zmq
import sys

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5555")
socket.setsockopt(zmq.SUBSCRIBE,'') 
while True:
    response = socket.recv();
    print("response: %s" % response)

输出:

$ python app/server.py 
发送消息
发送消息
发送消息

$ python app/client2.py 
response: 消息群发
response: 消息群发
response: 消息群发

$ python app/client1.py 
response: 消息群发
response: 消息群发
response: 消息群发

Parallel Pipeline模式:

由三部分组成,push进行数据推送,work进行数据缓存,pull进行数据竞争获取处理。区别于Publish-Subscribe存在一个数据缓存和处理负载。

当连接被断开,数据不会丢失,重连后数据继续发送到对端。
ZgUszj.png

Python实现

server端:

# -*- coding=utf-8 -*-
import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.bind("tcp://*:5557")

while True:
    socket.send("测试消息")
    print "已发送"    
    time.sleep(1)    

work端:

# -*- coding=utf-8 -*-

import zmq

context = zmq.Context()

recive = context.socket(zmq.PULL)
recive.connect('tcp://127.0.0.1:5557')

sender = context.socket(zmq.PUSH)
sender.connect('tcp://127.0.0.1:5558')

while True:
    data = recive.recv()
    print "正在转发..."
    sender.send(data)

client端:

# -*- coding=utf-8 -*-

import zmq
import sys

context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind("tcp://*:5558")

while True:
    response = socket.recv();
    print("response: %s" % response)

输出结果:

$ python app/server.py 
已发送
已发送
已发送

$ python app/work.py 
正在转发...
正在转发...
正在转发...

$ python app/client1.py
response: 测试消息
response: 测试消息
response: 测试消息

转载于:https://www.cnblogs.com/huang-yc/p/11167253.html

ZeroMQ是一个开源消息传递库,它提供了简单、高效的网络通信机制。ZeroMQ手册是一份详细的说明文档,介绍了ZeroMQ的各种用法、原理和相关的概念。 手册包含了ZeroMQ的基本概念、安装和配置、核心API、消息传递模式、线程和进程间通信、错误处理等内容。它以简明的语言和清晰的示例代码解释了各个方面的内容,使得读者能够更好地理解和使用ZeroMQ。 首先,手册介绍了ZeroMQ的基本概念,如socket、消息模式、消息队列等。它解释了ZeroMQ的设计原则,例如轻量级、异步非阻塞的通信方式,以及多种传输协议的支持。 接着,手册详细介绍了ZeroMQ的安装和配置。它包括了不同平台的安装方法,并提供了一些配置建议,以优化ZeroMQ的性能和可靠性。 然后,手册重点解释了ZeroMQ的核心API,包括socket创建和绑定、消息传输和处理、多线程和多进程通信的实现。通过示例代码,读者可以学习如何使用ZeroMQ创建不同类型的socket、发送和接收消息,并在不同的通信模式使用相应的API函数。 此外,手册还介绍了ZeroMQ的高级特性,如消息过滤、消息分发、可靠性保证等。它解释了这些特性的原理和用法,帮助读者根据实际需求选择合适的功能。 最后,手册提供了错误处理和常见问题的解答。它列举了一些常见的错误和异常情况,并提供了解决方法和调试技巧,帮助读者更好地理解和排除问题。 总之,ZeroMQ手册是一份非常有价值的资源。它通过简单明了的语言和详细的示例代码,为读者提供了全面的学习资料,帮助他们理解和使用ZeroMQ。无论是初学者还是有经验的开发者,都能从受益匪浅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值