• 【Python】记录一次 Linux + Python + RocketMQ 辛酸历程



    这是记录一次辛酸的Linux + Python + RocketMQ使用历程,需求背景是需要验证线上一个RocketMQ服务和里面的Topic,如果使用Java,还得打包,上传,太麻烦,使用脚本语言会方便很多,遇到的问题比较多,但是又不想省略其中的过程,就全记录下来了。

    安装Python

    准备环境

    yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
    
    • 1

    下载Python:https://www.python.org/downloads/source/

    将压缩包上传至服务器后,解压:

    tar -zxvf Python-3.10.5.tgz
    
    • 1

    编译安装

    进入解压后的文件夹,配置Python安装目录:

    mkdir -p /home/python3

    ./configure --prefix=/home/python3
    
    • 1

    执行完上面的操作之后,依次执行make、make install

    安装完成之后,创建软链接

    ln -s /neworiental/zhurunhua/python3/bin/python3.10 /usr/local/bin/python3

    ln -s /neworiental/zhurunhua/python3/bin/pip3.10 /usr/local/bin/pip3

      [root@mq01 Python-3.10.5]# ln -s /neworiental/zhurunhua/python3/bin/python3.10 /usr/local/bin/python3 
    [root@mq01 Python-3.10.5]# 
    [root@mq01 Python-3.10.5]# python3
    Python 3.10.5 (main, Aug 19 2022, 17:07:38) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 
    [root@mq01 Python-3.10.5]# 
    [root@mq01 Python-3.10.5]# ln -s /neworiental/zhurunhua/python3/bin/pip3.10 /usr/local/bin/pip3             
    [root@mq01 Python-3.10.5]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    校验:

    遇到问题

    pip3报错: (Caused by SSLError(“Can’t connect to HTTPS URL because the SSL module is not available.”)) - skipping

    看上去原因是没有配置openssl

    如果机器上没有安装,需要先安装openssl

    使用openssl version或 which openssl 查看是否安装

    我的机器上没有安装,还需要先安装

    安装openssl

    wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate

    下载后,上传至服务器,解压,进入解压后的文件分别执行:

    ./config

    make

    make install

    安装完成后,查看安装路径:

    [root@mq01 zhurunhua]# which openssl
    /usr/local/bin/openssl
    [root@mq01 zhurunhua]# 
    
    • 1
    • 2
    • 3

    创建软连接

    mv /usr/bin/openssl /usr/bin/openssl.bak

    ln -s /usr/local/bin/openssl /usr/bin/openssl

    执行 openssl version 看是否成功:

    又来两个错误:

    openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

    openssl: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

    不怕,找到文件后,再创建软连接

    [root@mq01 openssl-1.1.1n]# 
    [root@mq01 openssl-1.1.1n]# openssl version
    openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
    [root@mq01 openssl-1.1.1n]# 
    [root@mq01 openssl-1.1.1n]# find / -name libssl.so.1.1
    /usr/local/lib64/libssl.so.1.1
    [root@mq01 openssl-1.1.1n]# ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1      
    [root@mq01 openssl-1.1.1n]# 
    [root@mq01 openssl-1.1.1n]# 
    [root@mq01 openssl-1.1.1n]# openssl version                                              
    openssl: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
    [root@mq01 openssl-1.1.1n]# find / -name libcrypto.so.1.1
    /usr/local/lib64/libcrypto.so.1.1
    [root@mq01 openssl-1.1.1n]# ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1      
    [root@mq01 openssl-1.1.1n]# 
    [root@mq01 openssl-1.1.1n]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    安装成功:

    [root@mq01 openssl-1.1.1n]# openssl version                                                    
    OpenSSL 1.1.1n  15 Mar 2022
    [root@mq01 openssl-1.1.1n]# 
    
    • 1
    • 2
    • 3

    重新编译

    进入Python压缩包的解压目录:

    cd /neworiental/zhurunhua/Python-3.10.5

    编译:

    ./configure --prefix=/neworiental/zhurunhua/python3 --with-openssl=/usr/local/bin/openssl --with-openssl-rpath=auto
    
    • 1

    make又报错了

    看起来只能是升级,试了几次还是报这个错,决定换个思路。

    尝试一个新的方法,可以修改pip的配置,修改pip下载源,不使用带https的下载源

    创建配置文件

    mkdir -p ~/.pip
    touch ~/.pip/pip.conf
    vim ~/.pip/pip.conf
    
    • 1
    • 2
    • 3

    添加内容并保存:

    [global]
    index-url=http://pypi.douban.com/simple/
    extra-index-url=
            http://mirrors.aliyun.com/pypi/simple/
    #proxy = [user:passwd@]proxy.server:port
    [install]
    trusted-host=
            pypi.douban.com
            mirrors.aliyun.com
    ssl_verify: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    更新:pip3 install --upgrade pip

    可以看到,已经可以正常安装了

    安装依赖库

    下载 rocketmq-client-cpp-2.0.0-centos7.x86_64.rpm

    wget https://github.com/apache/rocketmq-client-cpp/releases/download/2.0.0/rocketmq-client-cpp-2.0.0-centos7.x86_64.rpm
    
    • 1

    也可以下载后上传

    直接安装

    rpm -ivh rocketmq-client-cpp-2.0.0-centos7.x86_64.rpm

    [root@mq01 zhurunhua]# rpm -ivh rocketmq-client-cpp-2.0.0-centos7.x86_64.rpm 
    Preparing...                          ################################# [100%]
            package rocketmq-client-cpp-2.0.0-centos.x86_64 is already installed
    [root@mq01 zhurunhua]# 
    [root@mq01 zhurunhua]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    准备代码

    import sys
    import time
    
    from rocketmq.client import PushConsumer
    
    # 接收参数
    namesrv = sys.argv[1]
    topic = sys.argv[2]
    consumer = sys.argv[3]
    
    print("=========================")
    print("[namesrv]:", namesrv)
    print("[topic]:", topic)
    print("[consumer]:", consumer)
    print("=========================")
    
    
    # 确认操作
    msg = input("是否继续:[y/n]:")
    if msg == 'y' or msg == 'Y':
        print("参数确认无误,操作继续...")
    elif msg == 'n' or msg == 'N':
        print("操作取消...")
        sys.exit()
    else:
        print("输入有误,操作取消...")
        sys.exit()
    
    
    def callback(msg):
        print('Received message. messageId: ', msg.id, ' body: ', msg.body)
    
    
    consumer = PushConsumer(consumer)
    consumer.set_namesrv_addr(namesrv)
    consumer.subscribe(topic, callback)
    consumer.start()
    
    
    while True:
        time.sleep(3600)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    验证

    执行脚本:

    注意三个参数,第一个nameserver,第二个topic,第三个group:

    可以收到消息

    控制台也可以收集到客户端的信息:

    总算是成功了。。。

  • 相关阅读:
    CloudCompare 二次开发(9)——半径滤波
    性格正直的人适合什么职业?
    Python每日一练(牛客新题库)——第11天:循环语句
    契约锁助力大型能源组织“产-运-储-销-交易”文件电子签
    根据实体类生成表生成语句
    整理了整整1个月Java面试手册,上传到Git上目前star数达到了30K+
    三大电商平台(淘宝/京东/阿里巴巴)封装商品详情API接口附代码实例|参数解析
    深入理解Spring AOP中的@EnableAspectJAutoProxy
    一台机器下,多个Java版本的粗放与精细管理
    Vuex怎么使用?来看看吧~
  • 原文地址:https://blog.csdn.net/sinat_14840559/article/details/126431039