本文為您介紹使用C++ SDK接入雲訊息佇列 RocketMQ 版所需完成的準備工作、使用說明以及注意事項,以便後續使用C++ SDK收發訊息。
- 推薦您使用最新的RocketMQ 5.x系列SDK,5.x系列SDK作為主力研發版本,和雲訊息佇列 RocketMQ 版5.x服務端完全相容,提供了更全面的功能並支援更多增強特性。更多資訊,請參見5.x系列SDK。
- RocketMQ 4.x/3.x系列SDK和ONS系列SDK後續僅做功能維護,建議僅存量業務使用。
使用前,請注意以下幾點:
-
本文僅針對C++ SDK v1.x.x版本進行說明。
-
代碼裡涉及到的Topic和Group ID,需要到控制台上建立。Message Tag可以完全由應用自訂,具體建立過程請參見建立資源。
-
使用雲訊息佇列 RocketMQ 版服務的應用程式需要部署在阿里雲ECS上。
SDK下載
C++ SDK支援Windows和Linux兩個作業系統,而且介面完全一致。Linux下支援CentOS 6(RHEL 6)和CentOS 7(RHEL 7)系列。C++ SDK的下載連結,請參見版本說明。
下載完成後進行解壓,會有如下目錄結構,各目錄的說明如下:
-
demo/(只針對Windows系統)
包含了一個建立好的Windows C++ 示範Demo。
-
example/
包含了普通訊息發送、Oneway訊息發送、順序訊息發送、普通訊息消費、順序訊息消費等例子,Linux下還包含了
Makefile用於example的編譯和管理。 -
include/
包含了使用者自己編寫的程式需要的標頭檔。
-
lib/
-
Linux SDK子目錄如下,分別是64位的靜態庫和動態庫。
lib-boost-share/ libonsclient4cpp.so lib-boost-static/ libonsclient4cpp.a -
Windows SDK子目錄如下,是64位系統下SDK的dll庫。如果沒有安裝Visual Studio 2015環境,需要拷貝安裝
vc_redist.x64。 這是Visual C++ 2015的運行時環境。64/ vc_redist.x64
-
-
SDK_GUIDE.pdf
SDK環境準備文檔和FAQ。
-
changelog
新版本發布解決的問題和引入的新特性列表。
Linux C++ SDK
自2016年12月02日開始,Linux CPP版本依賴了高效能boost庫(1.62.0版本),不僅降低了CPU資源佔用率,而且提高了運行效率。目前主要依賴了boost_system、boost_thread、boost_chrono、boost_filesystem四個庫,有靜態庫和動態庫兩種解決方案。
靜態解決方案
雲訊息佇列 RocketMQ 版的庫檔案在lib/lib-boost-static目錄下,boost庫靜態連結到libonsclient4cpp.a中。對於沒有依賴boost庫的業務方,可以直接選用靜態庫方案。靜態庫方案中,相應的boost庫已經連結到libonsclient4cpp.a,編譯時間只需要連結libonsclient4cpp.a即可,無需執行其他動作。使用方式如下。
cd aliyun-mq-linux-cpp-sdk //下載的SDK解壓後的路徑
cd example //進入example目錄,修改example檔案,填入您建立的Topic和Key等相關的資訊
make static=1
完全的靜態連結請確保機器上安裝了libstdc++、pthread等相關的靜態庫。預設安裝的libstdc++ 是沒有安裝靜態庫的,所以需要通過yum或者apt-get來安裝相關的靜態庫。
此外使用如上方式會出現一些警告資訊如下。
warning: Using 'gethostbyaddr' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
建議最佳的方式,不要使用完全的靜態連結,而是只靜態連結onsclient4cpp,其他庫動態連結即可。使用方式如下。
g++ -ggdb -Wall -O3 -I../include ../example/ProducerExampleForEx.cpp -Wl,-static -lonsclient4cpp -L../lib/lib-boost-static/ -Wl,-Bdynamic -lpthread -ldl -lrt -o ../example/ProducerExampleForEx
此外,由於GCC 5.x引入Dual ABI,編譯連結時,請添加-D_GLIBCXX_USE_CXX11_ABI=0編譯選項。
動態解決方案
雲訊息佇列 RocketMQ 版的庫檔案在lib/lib-boost-share目錄下,需要業務方產生可執行檔時連結boost動態庫和libonsclient4cpp.so。對於業務方已經依賴了boost庫,需要選擇動態庫方案的情況,對boost庫的依賴需要做如下工作:
-
下載boost 1.62.0版本。
-
解壓boost 1.62.0。
tar --bzip2 -xf /path/to/boost_1_62_0.tar.bz2 -
安裝boost 1.62.0版本:
-
進入boost 1.62.0解壓後的路徑:
cd path/to/boost_1_62_0 -
配置boost:
./bootstrap.sh -
編譯boost:
./b2 link=shared runtime-link=shared -
安裝boost:
./b2 install
-
-
執行
ldconfig -v|grep libboost。如果有相關的輸出,則表明boost動態庫在動態庫搜尋路徑中。 -
產生可執行檔時,需要連結boost動態庫和雲訊息佇列 RocketMQ 版的動態庫。方法如下。
cd aliyun-mq-linux-cpp-sdk //下載的SDK解壓後的路徑 cd example //進入example目錄,修改example檔案,填入自己在訊息佇列RocketMQ版控制台建立的Topic和Key等相關的資訊 g++ -Wall -Wno-deprecated -L ../lib/lib-boost-share/ -I ../include/ ProducerExampleForEx.cpp -lonsclient4cpp -lboost_system -lboost_thread -lboost_chrono -lboost_filesystem -lpthread export LD_LIBRARY_PATH="../lib/lib-boost-share/" //添加動態載入的搜尋路徑 ./a.out //運行程式
Windows C++ SDK
Visual Studio 2015環境下使用C++ SDK
-
使用Visual Studio 2015建立自己的專案。在 Visual Studio 2015 中,單擊 New Project,在模板樹中依次展開 Installed > Templates > Visual C++,選擇 Win32,然後在右側模板列表中選擇 Win32 Console Application,設定專案名稱後單擊 OK 建立專案。在 Win32 Application Wizard - ConsoleApplication1 嚮導概覽頁中,確認當前項目類型為 Console application,單擊 Next > 進入應用程式設定頁面。在 Win32 Application Wizard 的 Application Settings 頁面中,將 Application type 設定為 Console application,勾選 Empty project,然後單擊 Finish 完成專案建立。
-
按右鍵專案,選擇屬性 > 組態管理員,設定活動解決方案配置為release,設定活動解決方案平台為x64。
-
按右鍵專案,依次選擇屬性 > 配置屬性 > 常規 > 輸出目錄:/A。按照活動解決方案平台的設定,拷貝64位lib目錄下的所有檔案到輸出目錄/A。按右鍵專案,依次選擇 屬性 > 配置屬性 > 常規,確認 Output Directory 的值為
$(SolutionDir)$(Platform)\$(Configuration)\(該路徑在構建後自動產生),並將 Platform Toolset 設為 Visual Studio 2015 - Windows XP (v140_xp)。將下載的 SDK 的 lib 目錄下的ONSClient4CPP.dll、ONSClient4CPP.lib和ONSClient4CPP.pdb檔案拷貝到該輸出目錄中。 -
按右鍵專案,依次選擇屬性 > 配置屬性 > C/C++-常規 > 附加元件封裝含目錄:/B。 拷貝
include目錄下的標頭檔到包含目錄:/B。 -
按右鍵專案,依次選擇屬性 > 配置屬性 > 連結 > 常規 > 附加庫目錄:/A。添加SDK的lib目錄路徑(如
E:\aliyun-mq-windows-cpp-sdk\lib\64,包含相關的DLL檔案)。若在Windows 7環境下使用Visual Studio 2015,還需額外添加ucrt庫路徑(如C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10150.0\ucrt\x64)。 -
按右鍵專案,依次選擇屬性 > 配置屬性 > 連結 > 輸入 > 附加依賴項:ONSClient4CPP.lib。
-
按右鍵專案,依次選擇屬性 > 配置屬性 > C/C++-常規 > 前置處理器定義:添加WIN32宏。
Visual Studio非2015環境下使用C++ SDK
-
首先需要按照Visual Studio 2015的環境來配置,配置過程同Visual Studio 2015環境下使用C++ SDK。
-
安裝vc_redist.x64。這是Visual C++ 2015的運行時環境。
重要如果不想進行繁瑣的設定,您也可以使用設定好的SDK Demo,下載SDK後進行解壓,然後進入demo目錄,使用Visual Studio 2015開啟工程。
在 Solution Explorer 中右鍵點擊 demo 專案,開啟屬性頁面。將 Configuration 設為 Release,Platform 設為 x64。展開 Configuration Properties > C/C++ > General,編輯 Additional Include Directories 欄位,添加兩條路徑:
../../include和C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt。請將路徑中的版本號碼(如 10.0.10150.0)替換為您機器上實際安裝的 Windows Kits 版本號碼。到此為止就設定好編譯環境了。單擊Build,即可編譯出可執行檔程式,然後拷貝dll到可執行程式的目錄下即可運行,或者拷貝dll到系統目錄下。