ZeroMQ介绍及安装

ZeroMQ介绍及安装

ZeroMQ介绍及安装

1. 介绍

1.1 概述

ZeroMQ(又名ØMQ,MQ,或zmq)看起来像一个可嵌入的网络库,但其作用就像一个并发框架。

ZeroMQ类似于标准Berkeley套接字,其提供了各种传输工具,如进程内、进程间、TCP和组播中进行原子消息传送的套接字。

你可以使用各种模式实现N对N的套接字连接,这些模式包括:扇出、发布-订阅、任务分配、请求-应答。

ZeroMQ的速度足够快,因此可充当集群产品的结构。

ZeroMQ的异步I/O模型提供了可扩展的多核应用程序,用异步消息来处理任务。

ZeroMQ核心由C语言编写,支持C、C++、java等多种编程语言的API,并可运行在大多数操作系统上。

相关链接:

ZeroMQ是iMatix(http://www.imatix.com/)开发的,并在LGPLv3许可下开源。

官网API:http://api.zeromq.org/。

操作指南:http://zguide.zeromq.org/page:all。

性能测试:http://wiki.zeromq.org/results:perf-howto。

ZeroMQ的安装可以参阅:https://blog.csdn.net/qq_41453285/article/details/105989698。

1.2 ZeroMQ解决传统网络编程的问题

调用的socket接口较多。

TCP是一对一的连接。

编程需要关注很多socket细节问题。

不支持跨平台编程。

需要自行处理分包、组包问题。

流式传输时需处理粘包、半包问题。

需自行处理网络异常,比如连接异常中断、重连等。

服务端和客户端启动有先后。

自行处理IO模型。

自行实现消息的缓存。

自行实现对消息的加密。

1.3 ZeroMQ的优点

我们需要的是做消息传递工作的东西,但需要它以下面这种简单和廉价的方式完成工作:

它可以在任何应用程序中以接近零的消耗开展工作。

它应该是不需要任何其他依赖就可以链接的库。

无须额外的变动部件,所以没有额外的风险。

它应该能运行在任何操作系统上,并能用任何编程语言开展工作。

而这就是ZeroMQ :一个高效的可嵌入库,它解决了大部分应用程序需要解决的问题,变得在网络上有良好的可伸缩性,而没有多少成本。

具体做法:

它在后台线程异步处理I/O,这些线程使用无锁数据结构与应用程序进行通信,所以并发ZeroMQ应用程序不需要锁、信号量、或者其他等待状态。

组件可以动态地来去自如,而ZeroMQ会自动重新连接,这意味着你可以以任何顺序启动组件,你可以创建“面向服务的架构”(SOA),其中的服务可以在任何时间加入和离开网络。

它根据需要自动对消息排队。为此,它会智能地在对消息排队之前,将消息尽可能地推进到接收者。它有一个处理过满队列(称为“高水位标志”)的方法。当队列满时,ZeroMQ会自动阻止发件人,或丢弃消息,这取决于你正在做的是哪种消息传递(即所谓的“模式”)。

它可以让你的应用程序通过任意传输协议来互相交流,这些协议可以是:TCP、多播、进程内、进程间。你不需要更改代码以使用不同的传输工具。

它使用依赖于消息传递模式的不同策略,安全地处理速度慢/阻塞的读取者。

它可以让你采用多种模式,如请求-应答和发布-订阅来将消息路由。这些模式是指你如何创建拓扑结构和网络结构。

它可以让你创建代理(proxy)来排队、转发,或通过一个调用来捕获消息。代理可以降低网络互联的复杂性。

它使用在线路上的简单组帧原封不动地传递整个消息。如果你写了一个10KB 的消息,那么你将收到一个10KB 的消息。

它不对消息强加任何格式。它们是零字节到千兆字节的二进制大对象。当你想表示你的数据时,可以选择其上的其他一些产品,如谷歌的协议缓冲区、XDR 等。

它能智能地处理网络错误。有时候它会重试,有时它会告诉你某个操作失败。

它可以减少你的能源消耗。少花CPU多办事意味着使用电脑更少的能源,你可以让你的旧电脑使用更长的时间。

实际上,ZeroMQ做的比这更多。它对你如何开发网络功能的应用程序有颠覆性的影响:

从表面上看,这是一个在其上做zmq_msg_recv()和zmq_msg_send()的套接字风格的API。

但该消息处理循环迅速成为中心循环,而你的应用程序很快就会分解成一组消息处理任务。它是优雅和自然的。

而且,它可扩展:每个任务对应一个节点,节点通过任意传输方式互相交谈。在一个进程中的两个节点(节点是一个线程),在一台电脑中的两个节点(节点是一个进程),或一个网络上的两台电脑(节点是一台电脑),所有的处理方式都是相同的,不需要更改应用程序代码。

1.4 ZeroMQ模型

1.4.1 REQ/REP请求响应模型

演示案例可以参阅:https://dongshao.blog.csdn.net/article/details/106878960。

1.4.2 PUB/SUB发布订阅模型

演示案例可以参阅:https://dongshao.blog.csdn.net/article/details/106877202。

1.4.3 PUSH/PULL推拉模型

演示案例可以参阅:https://dongshao.blog.csdn.net/article/details/106922554。

1.4.4 Router/Dealer模型

演示案例可以参阅:hthttps://dongshao.blog.csdn.net/article/details/106878960。

2. 安装

安装参考网址

2.1 非源码

2.1.1 pip安装pyzmq

pip install pyzmq

如果由于某种原因wheel 不工作,或者您想强制编译pyzmq, (这里如果您已经按照您想要的方式安装并配置了libzmq,通常更好), 您可以使用以下命令强制安装:

pip install --no-binary=:all: pyzmq

2.1.2 yum安装

编译pyzmq时(例如在Linux上使用pip安装), 通常建议单独安装ZeroMQ, 通过自制软件、apt、yum等:

yum install libzmq3-devel

如果这不可用,pyzmq将尝试将libzmq构建为Python扩展, 尽管这并不能保证有效。

从git repo(包括GitHub上的release标签)构建pyzmq需要Cython。

2.2 源码安装

2.2.1 依赖包安装

依赖包安不安装都可以。

sudo yum install libtool -y

sudo yum install pkg-config -y

sudo yum install build-essential -y

sudo yum install autoconf -y

sudo yum install automake -y

2.2.2 上传压缩包

将zeromq-4.1.8.tar.gz和pyzmq-26.2.0.tar.gz安装包下载,并上传到服务器。

下载地址为:

pyzmq

zeromq

2.2.3 解压安装

tar -zxvf zeromq-4.1.8.tar.gz

cd zeromq-4.1.8

# 如果需要加密

./autogen.sh

# 编译安装

./configure

sudo make

sudo make install

tar -zxvf pyzmq-26.2.0.tar.gz

cd pyzmq-26.2.0

# 编译安装(低版本)

python setup.py configure --zmq=/usr/local #set the zmq install path

# 编译安装高版本

pip install setuptools wheel

pip install .

pip show pyzmq

2.2.3.1 zeromq

进行配置:

./configure

--prefix选项:如果不指定prefix选项,可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share。

配置完成之后如下图所示,产生Makefile文件:

如果配置时产生下面的错误,那么配置的时候添加--without-libsodium选项即可,表示我们不使用Sodium加密库,上面我们对Sodium已经介绍过了。

./configure --without-libsodium

想用arm-linux-gcc版本的,那么就的添加--host参数,以下其他操作都是相同,但是最后一步,需要将编译成功的lib下的库文件libzmq.so.5复制到ARM开发板的lib库文件夹当中。

./configure --host=arm-none-linux-gnueabi

编译与安装:

sudo make

sudo make install

安装完成之后动态库文件默认在/usr/local/lib/目录下,头文件默认在/usr/local/include/目录下。

执行下面的命令重新加载动态库。

sudo ldconfig

2.2.3.2 pyzmq

pip install setuptools wheel

cd pyzmq-26.2.0

pip install .

pip show pyzmq

3. 问题记录

3.1 pip安装报错

pip安装时提示安装错误。

(venv-patroni-4.0.3) [fbase@localhost .pip]$ /opt/soft/patroni/venv-patroni-4.0.3/bin/python3 -m pip install --upgrade pip

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple

Requirement already satisfied: pip in /opt/soft/patroni/venv-patroni-4.0.3/lib/python3.9/site-packages (22.0.4)

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1129)'))': /simple/pip/

WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1129)'))': /simple/pip/

cWARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1129)'))': /simple/pip/

dWARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1129)'))': /simple/pip/

WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1129)'))': /simple/pip/

Could not fetch URL https://pypi.tuna.tsinghua.edu.cn/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.tuna.tsinghua.edu.cn', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1129)'))) - skipping

WARNING: You are using pip version 22.0.4; however, version 24.3.1 is available.

You should consider upgrading via the '/opt/soft/patroni/venv-patroni-4.0.3/bin/python3 -m pip install --upgrade pip' command.

解决方案:

pip换源

# 命令行

pip config set global.trusted-host mirrors.aliyun.com

pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/

# 文件

cd ~/.pip

# 如果不存在

mkdir ~/.pip

cd ~/.pip

touch pip.conf

vi ~/.pip/pip.conf

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

[install]

trusted-host = https://pypi.tuna.tsinghua.edu.cn

pip使用临时国内源

pip install pyzmq -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

更新时间

yum install -y ntpdate

ntpdate ntp.aliyun.com

更新证书

yum install -y ca-certificates

update-ca-trust

3.2 yun无法安装libzmq3-devel

报错日志如下:

[root@localhost ~]# yum install libzmq3-devel

Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast

base | 3.6 kB 00:00:00

extras | 2.9 kB 00:00:00

updates | 2.9 kB 00:00:00

没有可用软件包 libzmq3-devel。

错误:无须任何处理

解决方案:

yum clean all

yum makecache

yum repolist enabled

# 如果没有epel-release就安装

yum install -y epel-release

# 再次安装

yum install -y libzmq3-devel

yum search libzmq

yum install -y zeromq zeromq-devel

# 如果没有

[root@localhost ~]# yum search libzmq

================================================================= N/S matched: libzmq ==================================================================

perl-ZMQ-LibZMQ3.x86_64 : Perl wrapper for the libzmq 3.x library

perl-ZMQ-Constants.noarch : Constants for the libzmq library

名称和简介匹配 only,使用“search all”试试。

[root@localhost ~]# yum install -y zeromq zeromq-devel

相关推荐

条码打印如何更换标签纸?
beat365官网备用

条码打印如何更换标签纸?

📅 07-24 👁️ 7936
Pentaho平台:企业级商业智能解决方案
365sport365

Pentaho平台:企业级商业智能解决方案

📅 11-15 👁️ 1974
WPS图片与图形处理技巧
beat365官网备用

WPS图片与图形处理技巧

📅 12-20 👁️ 6165