文章目录
- 安装Python
- 准备环境
- 编译安装
- 遇到问题
- 安装openssl
- 重新编译
- 安装依赖库
- 准备代码
- 验证
这是记录一次辛酸的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
下载Python:https://www.python.org/downloads/source/
将压缩包上传至服务器后,解压:
tar -zxvf Python-3.10.5.tgz
编译安装
进入解压后的文件夹,配置Python安装目录:
mkdir -p /home/python3
./configure --prefix=/home/python3
执行完上面的操作之后,依次执行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]#
校验:
遇到问题
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]#
创建软连接
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]#
安装成功:
[root@mq01 openssl-1.1.1n]# openssl version
OpenSSL 1.1.1n 15 Mar 2022
[root@mq01 openssl-1.1.1n]#
重新编译
进入Python压缩包的解压目录:
cd /neworiental/zhurunhua/Python-3.10.5
编译:
./configure --prefix=/neworiental/zhurunhua/python3 --with-openssl=/usr/local/bin/openssl --with-openssl-rpath=auto
make又报错了
看起来只能是升级,试了几次还是报这个错,决定换个思路。
尝试一个新的方法,可以修改pip的配置,修改pip下载源,不使用带https的下载源
创建配置文件
mkdir -p ~/.pip
touch ~/.pip/pip.conf
vim ~/.pip/pip.conf
添加内容并保存:
[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
更新: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
也可以下载后上传
直接安装
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]#
准备代码
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)
验证
执行脚本:
注意三个参数,第一个nameserver,第二个topic,第三个group:
可以收到消息
控制台也可以收集到客户端的信息:
总算是成功了。。。