このトピックでは、C++ SDK を使用して ApsaraMQ for RocketMQ でメッセージを送受信するための準備、手順、注意事項について説明します。
最新の RocketMQ 5.x SDK の使用を推奨します。これらの SDK は ApsaraMQ for RocketMQ 5.x ブローカーと完全な互換性があり、より多くの機能と強化された特徴を提供します。詳細については、「C++ SDK のバージョン情報」をご参照ください。
Alibaba Cloud は、RocketMQ 4.x、3.x、および TCP クライアント SDK のみをメンテナンスしています。これらは既存のビジネスでのみ使用することを推奨します。
開始する前に、以下の点にご注意ください:
-
このガイドは C++ SDK v1.x.x にのみ適用されます。
-
コードで使用される Topic とグループ ID は、コンソールで作成する必要があります。メッセージタグはアプリケーションで完全にカスタマイズできます。これらのリソースの作成方法については、「リソースの作成」をご参照ください。
-
ApsaraMQ for RocketMQ を使用するアプリケーションは、Elastic Compute Service (ECS) インスタンスにデプロイする必要があります。
SDK のダウンロード
C++ SDK は、Windows と Linux 用に同一の API を提供します。サポートされている Linux ディストリビューションには、CentOS 6 (RHEL 6) と CentOS 7 (RHEL 7) が含まれます。C++ SDK のダウンロードについては、「TCP クライアント SDK for C++ のリリースノート」をご参照ください。
パッケージをダウンロードして展開すると、以下のディレクトリ構造が表示されます:
-
demo/ (Windows のみ)
ビルド済みの Windows C++ デモプロジェクト。
-
example/
通常メッセージ、一方向メッセージ、順序付きメッセージの送信、および通常メッセージと順序付きメッセージの消費のサンプルです。Linux では、このディレクトリには
exampleファイルをコンパイルおよび管理するためのMakefileも含まれています。 -
include/
アプリケーションに必要なヘッダーファイル。
-
lib/
-
Linux SDK のサブディレクトリには、64 ビットの静的ライブラリと動的ライブラリが含まれています。
lib-boost-share/ libonsclient4cpp.so lib-boost-static/ libonsclient4cpp.a -
Windows SDK のサブディレクトリには、64 ビットの DLL が含まれています。Visual Studio 2015 がインストールされていない場合は、
vc_redist.x64をインストールする必要があります。これは Visual C++ 2015 のランタイムです。64/ vc_redist.x64
-
-
SDK_GUIDE.pdf
SDK 環境の設定に関するドキュメントとよくある質問。
-
changelog
新しいリリースでのバグ修正と新機能のリスト。
Linux C++ SDK
2016年12月2日以降、Linux C++ SDK は CPU 使用率を削減し、効率を向上させるために、高性能な Boost ライブラリ (バージョン 1.62.0) に依存しています。主に boost_system、boost_thread、boost_chrono、boost_filesystem の 4 つのライブラリに依存しています。静的リンクと動的リンクの両方のソリューションが利用可能です。
静的リンク
ApsaraMQ for RocketMQ のライブラリファイルは lib/lib-boost-static ディレクトリにあり、Boost ライブラリは libonsclient4cpp.a に静的にリンクされています。アプリケーションが Boost ライブラリに依存していない場合は、この静的ライブラリソリューションを直接使用できます。このソリューションでは、Boost ライブラリはすでに libonsclient4cpp.a にリンクされているため、コンパイル時に libonsclient4cpp.a に対してリンクするだけで済みます。他の操作は必要ありません。使用方法は以下の通りです。
cd aliyun-mq-linux-cpp-sdk // SDK を展開したディレクトリ
cd example // example ディレクトリに移動し、Topic、キー、その他の情報でサンプルファイルを変更します
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 オプションを追加してください。
動的リンク
ApsaraMQ for RocketMQ のライブラリファイルは lib/lib-boost-share ディレクトリにあります。実行可能ファイルを生成する際には、Boost 動的ライブラリと libonsclient4cpp.so をリンクする必要があります。アプリケーションがすでに 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 動的ライブラリと ApsaraMQ for RocketMQ 動的ライブラリをリンクします:
cd aliyun-mq-linux-cpp-sdk // SDK を展開したディレクトリ cd example // example ディレクトリに移動し、ApsaraMQ for RocketMQ コンソールから取得した Topic、キー、その他の情報でサンプルファイルを変更します 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 C++] を展開し、[Win32] を選択してから [Win32 コンソールアプリケーション] を選択します。プロジェクト名を設定した後、[OK] をクリックします。[Win32 アプリケーションウィザード] の概要ページで、プロジェクトの種類が [コンソールアプリケーション] であることを確認し、[次へ >] をクリックします。アプリケーションの設定ページで、[アプリケーションの種類] を [コンソールアプリケーション] に設定し、[空のプロジェクト] チェックボックスを選択して、[完了] をクリックします。
-
ソリューションエクスプローラーでプロジェクトを右クリックし、[プロパティ] > [構成マネージャー] を選択します。[アクティブソリューション構成] を [release] に、[アクティブソリューションプラットフォーム] を [x64] に設定します。
-
プロジェクトを右クリックし、[プロパティ] > [構成プロパティ] > [全般] を選択し、[出力ディレクトリ] を /A に設定します。[アクティブソリューションプラットフォーム] の設定に基づいて、64 ビットの lib ディレクトリからすべてのファイルを /A 出力ディレクトリにコピーします。プロジェクトを右クリックし、[プロパティ] > [構成プロパティ] > [全般] を選択し、[出力ディレクトリ] が
$(SolutionDir)$(Platform)\$(Configuration)\(このパスはビルド後に自動的に生成されます) であることを確認し、[プラットフォームツールセット] を [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 C++ 2015 のランタイムである vc_redist.x64 をインストールします。
重要手動設定を避けるために、事前設定済みの SDK デモを使用できます。SDK をダウンロードして展開した後、`demo` ディレクトリに移動し、Visual Studio 2015 でプロジェクトを開きます。
ソリューションエクスプローラーで、demo プロジェクトを右クリックしてプロパティを開きます。[構成] を [Release] に、[プラットフォーム] を [x64] に設定します。[構成プロパティ] > [C/C++] > [全般] を展開します。[追加のインクルードディレクトリ] フィールドを編集し、
../../includeとC:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrtの 2 つのパスを追加します。10.0.10150.0 などのバージョン番号は、お使いのマシンにインストールされている Windows Kits のバージョンに置き換えてください。これでビルド環境が設定されました。[ビルド] をクリックして実行可能プログラムをコンパイルします。プログラムを実行するには、DLL ファイルを実行可能ファイルと同じディレクトリ、またはシステムディレクトリにコピーします。