因本人是 python 開發,macbook 開發。windows 可以采取配置遠程 linux 解釋器或者 pycharm 專業版的 docker 解釋器進行開發
M1 芯片 本地運行 rocketmq
rocketmq Python 開源地址:
https://github.com/apache/rocketmq-client-python
因為需要 linux c/c++ libs包,官方只給出了centos ,debain,macOS 配置信息
終端使用 brew install wget 命令 【注意代理/或開啟 tun 模式】
? x86_64 架構的 librocketmq.dylib
wget <https://github.com/apache/rocketmq-client-cpp/releases/download/2.0.0/rocketmq-client-cpp-2.0.0-bin-release.darwin.tar.gz>
tar -xzf rocketmq-client-cpp-2.0.0-bin-release.darwin.tar.gz
cd rocketmq-client-cpp
sudo mkdir /usr/local/include/rocketmq
sudo mkdir -p /usr/local/lib
sudo cp include/* /usr/local/include/rocketmq
sudo cp lib/* /usr/local/lib>>>>>修正動態庫 ID(macOS 的 install_name_tool)
>>>>>這一步是為了確保 Python 在加載 .dylib 時不出錯(macOS 默認路徑檢查嚴格)sudo install_name_tool -id "@rpath/librocketmq.dylib" /usr/local/lib/librocketmq.dylib
上面會把 librocketmq.dylib 安裝到 /usr/local/lib/,讓動態鏈接器可以找到它
為了避免后續找不到 .dylib
- 確保文件放到了 /usr/local/lib/librocketmq.dylib [? 添加鏈接路徑到系統環境變量]
vim ~/.zshrc
echo 'export DYLD_LIBRARY_PATH="/usr/local/lib:$DYLD_LIBRARY_PATH"' >> ~/.zshrc
source ~/.zshrc
驗證:
ls /usr/local/lib/librocketmq.dylib
由于 mac 都是 m1芯片的,Intel x86 的可以忽略該操作。
否則使用 arm 架構的有這個錯誤!!!!
OSError: ... is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')
- 使用 Rosetta 啟動終端(右鍵 iTerm → “使用 Rosetta 打開”)【顯示簡介】
https://cdn.jsdelivr.net/gh/jacinli/image-hosting@main/notes/202505161413677.png
點擊顯示簡介
x86_64 的 conda 環境:
CONDA_SUBDIR=osx-64 conda create -n rocketmq-x86 python=3.10
conda activate rocketmq-x86>>>>>>>
python -c "import platform; print(platform.machine())"
>>>>>
x86_64
安裝依賴:
pip install rocketmq-client-python
驗證操作:
python -c "import platform; print(platform.machine())"驗證成功:
from rocketmq.client import Producer
print("RocketMQ 啟動成功 ?")
上面就表示已經成功導入。
如果是本地運行,請使用騰訊云 mq 公網地址
【無法使用 arm 架構的 librocketmq.dylib 】
這個前提是:官方有提供 ARM 架構的 RocketMQ C++ SDK,但很遺憾:
🔥 截止目前(2025),Apache 官方只提供了
x86_64 的 Darwin 版本
?? 沒有 ARM64 架構的 .dylib,所以你
無法直接在 M1 的原生 Python 上運行
騰訊云rocketmq 配置
因為這個和其他的不太一樣
項目 | 騰訊云 RocketMQ |
---|---|
NameServer 地址 | 是騰訊云提供的專屬地址,例如 rmq-cn-xxx.rmq.cloud.tencent.com:8080 |
Topic | 必須先在 騰訊云控制臺創建 Topic |
Group、權限等 | 都要在控制臺配置或授權 |
自動創建 Topic | ? 不支持(和 Apache 的 autoCreateTopic=true 不一樣) |
在控制臺 先創建 topic :創建名為 dev-test-mq-for-0516 的 Topic
然后發送測試消息 【這樣保證域名能被解析到】
rocketmq.exceptions.ProducerSendSyncFailed: No route info of this topic: dev-test-mq-for-0516
如果有這個錯誤 可以看一下 自己的集群 地址,看看本地開發到底是公網還是私網地址,這個很重要!!!!
可以創建一個 group 來測試。
在騰訊云操作上必須要創建 topic group 現有這兩個,才可以進行消費與生產!!!!!
?這是最關鍵的一步!否則客戶端永遠查不到路由。
請這樣操作:
- 打開控制臺 ? RocketMQ 實例 ? Topic 管理 ? 點進 dev-test-mq-for-0516
- 查看 隊列數量 是不是 0?(你之前看到是 3,但如果不是綁定在你當前集群的 Broker 上,也等于沒用)
- 點右側「編輯」
- 重新設置隊列數量為 3(或其他),然后點保存提交
這樣就會重新綁定路由到 Broker。
回到 Topic 管理 ? 點 發送測試消息,填點消息內容,發送一下。
這個過程就會刷新 NameServer 的路由緩存。
可以測一測網絡信息,以免是網絡
telnet rmq-xxxx.rocketmq.gz.qcloud.tencenttdmq.com 8080ping rmq-xxxx.rocketmq.gz.qcloud.tencenttdmq.com
騰訊云的 RocketMQ 默認是 VPC 專網訪問,如果你本地是公網,要配置公網訪問地址,并且:
- 對應賬號要開啟公網訪問權限
- SDK 需要用公網域名
- AK/SK 權限配置正確