首页 > 其他分享 >ZeroMQ介绍及安装

ZeroMQ介绍及安装

时间:2024-12-24 19:56:20浏览次数:3  
标签:None 介绍 yum install pip ZeroMQ 安装 pyzmq

ZeroMQ介绍及安装

1. 介绍

1.1 概述

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

  • 调用的socket接口较多。
  • TCP是一对一的连接。
  • 编程需要关注很多socket细节问题。
  • 不支持跨平台编程。
  • 需要自行处理分包、组包问题。
  • 流式传输时需处理粘包、半包问题。
  • 需自行处理网络异常,比如连接异常中断、重连等。
  • 服务端和客户端启动有先后。
  • 自行处理IO模型。
  • 自行实现消息的缓存。
  • 自行实现对消息的加密。

1.3 ZeroMQ的优点

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

    • 它可以在任何应用程序中以接近零的消耗开展工作。
    • 它应该是不需要任何其他依赖就可以链接的库。
    • 无须额外的变动部件,所以没有额外的风险。
    • 它应该能运行在任何操作系统上,并能用任何编程语言开展工作。
  2. 而这就是ZeroMQ :一个高效的可嵌入库,它解决了大部分应用程序需要解决的问题,变得在网络上有良好的可伸缩性,而没有多少成本。

  3. 具体做法:

    • 它在后台线程异步处理I/O,这些线程使用无锁数据结构与应用程序进行通信,所以并发ZeroMQ应用程序不需要锁、信号量、或者其他等待状态。
    • 组件可以动态地来去自如,而ZeroMQ会自动重新连接,这意味着你可以以任何顺序启动组件,你可以创建“面向服务的架构”(SOA),其中的服务可以在任何时间加入和离开网络。
    • 它根据需要自动对消息排队。为此,它会智能地在对消息排队之前,将消息尽可能地推进到接收者。它有一个处理过满队列(称为“高水位标志”)的方法。当队列满时,ZeroMQ会自动阻止发件人,或丢弃消息,这取决于你正在做的是哪种消息传递(即所谓的“模式”)。
    • 它可以让你的应用程序通过任意传输协议来互相交流,这些协议可以是:TCP、多播、进程内、进程间。你不需要更改代码以使用不同的传输工具。
    • 它使用依赖于消息传递模式的不同策略,安全地处理速度慢/阻塞的读取者。
    • 它可以让你采用多种模式,如请求-应答和发布-订阅来将消息路由。这些模式是指你如何创建拓扑结构和网络结构。
    • 它可以让你创建代理(proxy)来排队、转发,或通过一个调用来捕获消息。代理可以降低网络互联的复杂性。
    • 它使用在线路上的简单组帧原封不动地传递整个消息。如果你写了一个10KB 的消息,那么你将收到一个10KB 的消息。
    • 它不对消息强加任何格式。它们是零字节到千兆字节的二进制大对象。当你想表示你的数据时,可以选择其上的其他一些产品,如谷歌的协议缓冲区、XDR 等。
    • 它能智能地处理网络错误。有时候它会重试,有时它会告诉你某个操作失败。
    • 它可以减少你的能源消耗。少花CPU多办事意味着使用电脑更少的能源,你可以让你的旧电脑使用更长的时间。
  4. 实际上,ZeroMQ做的比这更多。它对你如何开发网络功能的应用程序有颠覆性的影响:

    • 从表面上看,这是一个在其上做zmq_msg_recv()和zmq_msg_send()的套接字风格的API。
    • 但该消息处理循环迅速成为中心循环,而你的应用程序很快就会分解成一组消息处理任务。它是优雅和自然的。
    • 而且,它可扩展:每个任务对应一个节点,节点通过任意传输方式互相交谈。在一个进程中的两个节点(节点是一个线程),在一台电脑中的两个节点(节点是一个进程),或一个网络上的两台电脑(节点是一台电脑),所有的处理方式都是相同的,不需要更改应用程序代码。

1.4 ZeroMQ模型

1.4.1 REQ/REP请求响应模型

1.4.2 PUB/SUB发布订阅模型

1.4.3 PUSH/PULL推拉模型

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.gzpyzmq-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文件:

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

        ./configure --without-libsodium
        
      2. 想用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

标签:None,介绍,yum,install,pip,ZeroMQ,安装,pyzmq
From: https://www.cnblogs.com/zreo2home/p/18628576

相关文章

  • ZeroMQ的使用(python)
    ZeroMQ的使用(python)1.python环境使用1.1非源码安装在安装pyzmq和libzmq3-devel之后便可以使用zeromq了。需要提前安装好python环境。(venv-patroni-4.0.3)[fbase@localhostzmq]$mkdir~/soft/zmq(venv-patroni-4.0.3)[fbase@localhostzmq]$cd~/soft/zmq(venv-pat......
  • 禅道安装与使用全解析:开启高效项目管理之旅
    禅道是一款国产的开源项目管理软件,它融合了项目管理、任务管理、缺陷管理、测试管理等多种功能,广泛应用于互联网软件研发等众多领域。一、功能特点项目管理禅道可以对项目进行全生命周期的管理。从项目的创建、规划,到执行、监控和收尾,每个阶段都有相应的功能支持。例如,在项目......
  • Bugzilla 安装及使用指南:助力软件缺陷精准管控
    Bugzilla是一个开源的缺陷跟踪系统,在软件开发和测试过程中被广泛使用。一、主要功能缺陷提交开发团队成员、测试人员或者用户可以通过Bugzilla提交软件中发现的问题。提交时需要详细描述缺陷的症状,比如软件在执行某个特定操作时出现的错误提示信息、软件崩溃的具体场景等。例......
  • Jira 安装与使用全攻略:开启高效项目管理之旅
    一、基本介绍所属公司及背景:Jira是由澳大利亚的Atlassian公司开发的。Atlassian是一家知名的软件公司,专注于为团队提供协作和生产力工具。Jira最初是为软件开发团队设计的,用于管理软件项目中的问题(如缺陷、任务、新功能请求等),随着时间的推移,它的应用范围不断扩展,被许多不同行业......
  • 麒麟系统修改配置镜像源地址并安装openGL
    1.编辑文件/etc/apt/sources.list进入目录cd /etc/apt/编辑文件(需要root权限)sudovi sources.list将镜像地址改为你指定的镜像地址#debhttp://archive.kylinos.cn/kylin/KYLIN-ALL10.1mainrestricteduniversemultiverse#debhttp://archive.kylinos.cn/kylin/KYL......
  • 2024年12月安装frida12.8.0
    一、遇到问题用frida16+android7,遇到不稳定的奇葩黑屏问题因为编译一些东西,python升级到了3.12,但是它不支持frida12,于是安装windows/pyenvpyenvglobal3.7.2pipinstallfrida==12.8.0报错!xmlrpc.client.Fault:<Fault-32500:'RuntimeError:PyPInolongersuppo......
  • 【保姆级教程】10分钟搞定Linux安装JDK,小白也能轻松上手!
    本文将详细介绍如何在Linux系统上安装配置JDK环境,包括下载、安装、环境变量配置等全过程。一、准备工作1.1检查系统是否已安装JDKjava-version如果显示"commandnotfound",说明系统中还没有安装JDK。1.2下载JDK安装包访问Oracle官网下载页面:https://www.oracle.com/j......
  • 2024 新版Clion安装使用教程(附激活以及常见问题处理)
    Clion简介在同学向我吐槽codeblock多么难用于是我疯狂安利CLion的时候,他发出了灵魂的拷问——“CLion是啥?”CLion和codeblock一样都是可以编写C/CPP的IDE(集成开发环境),CLion的优点多多,尤其是CLion对小白非常友好。配置简单:只需要点几下鼠标就可以完成编译器配置。语法查错:很多......
  • Linux上安装和配置Syncthing,实现文件同步
    1、下载最新部署包curl-shttps://api.github.com/repos/syncthing/syncthing/releases/latest|grepbrowser_download_url|greplinux-amd64|cut-d'"'-f4|wget-qi-2、解压并安装tar-xvfsyncthing-linux-amd64-v1.28.1.tar.gzmvsyncthing-linux-amd64-v1.2......
  • 安装docker
    sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-commongnupglsb-release#阿里源(推荐使用阿里的gpgKEY)curl-fsSLhttps://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg|sudogpg--dearmor-o/usr/share/keyrings/docker-archive-k......