Este tema describe cómo preparar el entorno para usar el SDK de C++ v1.x.x con Message Queue for Apache RocketMQ. Esto le permite utilizar el SDK para enviar y recibir mensajes.
Antes de empezar:
Este tema solo aplica al SDK de C++ v1.x.x.
En la consola, cree los topics y los ID de grupo que utilizará su código. Puede personalizar las etiquetas de mensaje en su aplicación. Para obtener más información sobre cómo crear recursos, consulte Create resources.
Las aplicaciones que utilizan Message Queue for Apache RocketMQ deben desplegarse en instancias ECS.
Descarga del SDK de Tablestore para C++
El SDK de C++ es compatible con los sistemas operativos Windows y Linux mediante interfaces idénticas. En Linux, se admiten las series CentOS 6 (RHEL 6) y CentOS 7 (RHEL 7). Para obtener más información sobre cómo descargar el SDK de C++, consulte Release notes for the TCP client SDK for C++.
Una vez completada la descarga, descomprima el paquete. La estructura de directorios es la siguiente:
-
demo/ (solo para Windows)
Contiene una demo de C++ para Windows ya creada.
-
example/
Los ejemplos incluyen envío de mensajes normales, envío de mensajes unidireccionales, envío de mensajes ordenados, consumo de mensajes normales y consumo de mensajes ordenados. Linux también incluye un
Makefilepara la compilación y gestión deexample. -
include/
Este directorio contiene los archivos de encabezado necesarios para sus propios programas.
-
lib/
-
Los siguientes subdirectorios del SDK de Linux corresponden a las bibliotecas estáticas y dinámicas de 64 bits.
lib-boost-share/ libonsclient4cpp.so lib-boost-static/ libonsclient4cpp.a -
El subdirectorio del SDK de Windows es el siguiente, que corresponde a la biblioteca dll del SDK en un sistema de 64 bits. Si no tiene instalado el entorno de Visual Studio 2015, copie el archivo de instalación
vc_redist.x64. Este constituye el entorno de ejecución para Visual C++ 2015.64/ vc_redist.x64
-
-
SDK_GUIDE.pdf
Contiene la documentación y las preguntas frecuentes (FAQ) sobre cómo preparar el entorno del SDK.
-
changelog
Contiene correcciones de bugs y nuevas funciones en las versiones recientes.
SDK de C++ para Linux
Desde el 2 de diciembre de 2016, la versión de CPP para Linux depende de la biblioteca boost de alto rendimiento (versión 1.62.0), lo cual reduce la tasa de utilización de recursos de CPU y mejora la eficiencia operativa. Actualmente, depende principalmente de cuatro bibliotecas: boost_system, boost_thread, boost_chrono y boost_filesystem. Existen dos soluciones: biblioteca estática y biblioteca dinámica.
Solución estática
El archivo de biblioteca de ApsaraMQ for RocketMQ se encuentra en el directorio lib/lib-boost-static. La biblioteca boost está vinculada estáticamente a libonsclient4cpp.a. Para los proyectos que no dependen de la biblioteca boost, puede seleccionar directamente la solución de biblioteca estática. En esta solución, la biblioteca boost correspondiente ya se ha vinculado a libonsclient4cpp.a. Solo necesita vincular libonsclient4cpp.a durante la compilación; no se requieren otras operaciones. El siguiente código proporciona un ejemplo de cómo configurar los campos:
cd aliyun-mq-linux-cpp-sdk // The path where the downloaded SDK is decompressed.
cd example // Go to the example directory, modify the example file, and enter the information about the topic and key that you created.
make static=1
Para vínculos completamente estáticos, asegúrese de que libstdc++, pthread y otras bibliotecas estáticas relacionadas estén instaladas en la máquina. De forma predeterminada, libstdc++ no tiene bibliotecas estáticas instaladas, por lo que debe instalar las bibliotecas estáticas relacionadas mediante yum o apt-get.
Además, aparecerán algunos mensajes de advertencia como los siguientes al utilizar el método anterior.
warning: Using 'gethostbyaddr' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
Se recomienda no utilizar vínculos completamente estáticos, sino vincular estáticamente solo onsclient4cpp, mientras que las demás bibliotecas pueden vincularse dinámicamente. El siguiente código proporciona un ejemplo de cómo configurar los campos:
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
Adicionalmente, dado que GCC 5.x introduce Dual ABI, al compilar los vínculos, agregue la opción de compilador -D_GLIBCXX_USE_CXX11_ABI=0.
Soluciones dinámicas
El archivo de biblioteca de ApsaraMQ for RocketMQ se encuentra en el directorio lib/lib-boost-share, y el proyecto necesita vincular la biblioteca dinámica de boost y libonsclient4cpp.so al generar el archivo ejecutable. Si el proyecto ya depende de la biblioteca boost y necesita seleccionar una solución de biblioteca dinámica, se deben realizar los siguientes pasos para configurar dicha dependencia:
-
Descargue Boost 1.62.0.
-
Descomprima boost 1.62.0.
tar --bzip2 -xf /path/to/boost_1_62_0.tar.bz2 -
Instale boost versión 1.62.0:
Vaya a la ruta donde se descomprimió boost 1.62.0:
cd path/to/boost_1_62_0Configure boost:
./bootstrap.shCompile boost:
./b2 link=shared runtime-link=sharedInstale boost:
./b2 install
Ejecute
ldconfig -v|grep libboost. Si hay salida relevante, indica que la biblioteca dinámica de boost se encuentra en la ruta de búsqueda de bibliotecas dinámicas.-
Al generar un archivo ejecutable, debe vincular la biblioteca dinámica de boost y la biblioteca dinámica de ApsaraMQ for RocketMQ. El método es el siguiente.
cd aliyun-mq-linux-cpp-sdk // The path where the downloaded SDK is decompressed. cd example // Go to the example directory, modify the example file, and enter the topics and keys that you created in the Message Queue for Apache RocketMQ console. 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/" //Add dynamically loaded search paths. ./a.out //Run the program.
SDK de C++ para Windows
Uso del SDK de C++ en Visual Studio 2015
-
Cree un proyecto en Visual Studio 2015.
Haga clic en New Project. En el cuadro de diálogo New Project, seleccione Installed > Templates > Visual C++ > Win32, luego seleccione Win32 Console Application y haga clic en OK para crear el proyecto.
En el cuadro de diálogo Win32 Application Wizard, confirme que el tipo de proyecto sea Console application, luego haga clic en Next para continuar con el siguiente paso de configuración.
Establezca Application type en Console application, seleccione Empty project, luego haga clic en Finish para crear un proyecto vacío.
Haga clic con el botón derecho en el proyecto y seleccione Property > Configuration Manager. Establezca Active solution configuration en release y Active solution platform en x64.
-
Haga clic con el botón derecho en el proyecto y vaya a Property > Configuration Properties > General. Establezca Output Directory en /A. Según la configuración de Active solution platform, copie todos los archivos del directorio lib de 64 bits en el directorio de salida /A.
Establezca Platform Toolset en Visual Studio 2015 - Windows XP (v140_xp). El valor de Output Directory es
$(SolutionDir)$(Platform)\$(Configuration)\, que se genera automáticamente después de la compilación. Copie ONSClient4CPP.dll, ONSClient4CPP.lib y ONSClient4CPP.pdb desde el directorio lib del SDK a este directorio de salida de compilación. -
Haga clic con el botón derecho en el proyecto y vaya a Property > Configuration Properties > C/C++ > General. Establezca Additional Include Directories en /B. Copie los archivos de encabezado del directorio
includeen /B.Agregue la ruta del directorio include del SDK (por ejemplo,
E:\aliyun-mq-windows-cpp-sdk\include). Alternativamente, especifique otro directorio y copie allí los archivos include del SDK. Si utiliza VS2015 en Windows 7, agregue también la ruta ucrt de Windows Kits, por ejemplo,C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt. -
Haga clic con el botón derecho en el proyecto y vaya a Property > Configuration Properties > Linker > General. Establezca Additional Library Directories en /A.
Agregue las siguientes rutas:
La ruta del directorio
lib\64del SDK (contiene los archivos DLL relevantes).Si utiliza VS2015 en Windows 7, agregue también la ruta ucrt\x64 de Windows Kits, por ejemplo,
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10150.0\ucrt\x64.
Haga clic con el botón derecho en el proyecto y vaya a Property > Configuration Properties > Linker > Input. Establezca Additional Dependencies en ONSClient4CPP.lib.
-
Haga clic con el botón derecho en el proyecto y vaya a Property > Configuration Properties > C/C++ > Preprocessor. Agregue la macro WIN32 a Preprocessor Definitions.
Establezca Preprocessor Definitions en
NDEBUG;WIN32_CONSOLE;%(PreprocessorDefinitions).
Uso del SDK de C++ en un entorno distinto a Visual Studio 2015
Configure su entorno siguiendo los pasos de la sección "Uso del SDK de C++ en Visual Studio 2015".
-
Instale vc_redist.x64, el entorno de ejecución para Visual C++ 2015.
ImportantePara evitar configuraciones complejas, puede utilizar la demo del SDK preconfigurada. Después de descargar y extraer el SDK, vaya al directorio demo y abra el proyecto en Visual Studio 2015.
En Solution Explorer, haga clic con el botón derecho en el proyecto demo y seleccione Properties para abrir la página de propiedades.
Expanda Configuration Properties > C/C++ > General.
Edite Additional Include Directories y agregue las rutas
../../includeyC:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt.Reemplace el número de versión en la ruta ucrt (como
10.0.10150.0) con la versión del SDK de Windows instalada en su máquina.
Haga clic en Build para compilar el proyecto. Para ejecutar el archivo ejecutable, copie los DLL necesarios en el directorio del ejecutable o en un directorio del sistema.