全部产品
云市场

环境准备(v1.x.x)

更新时间:2019-09-13 21:59:49

本文为您介绍使用 v1.x.x 版本的 C++ SDK 接入消息队列 MQ 所需完成的准备工作、使用说明以及注意事项,以便后续使用 C++ SDK 收发消息。

使用前,请注意以下几点:

  • 本文仅针对 C++ SDK v1.x.x 版本进行说明,若需使用 v2.0.0 版本的 SDK,可选择升级直接下载。v2.0.0 版本的 SDK 使用说明请参见环境准备(v2.0.0)

  • 代码里涉及到的 Topic 和 Group ID,需要到控制台上创建。Message Tag 可以完全由应用自定义,具体创建过程请参见主账号 - 快速入门中的步骤二:创建资源

  • 使用消息队列 MQ 服务的应用程序需要部署在阿里云 ECS 上。

SDK 下载

C++ SDK 支持 Windows 和 Linux 两个操作系统,而且接口完全一致。C++ SDK 的下载链接,请参见版本说明

下载完成后进行解压,会有如下目录结构,各目录的说明如下:

  • demo/(只针对 Windows 系统)

    包含了一个创建好的 Windows C++ 演示 Demo。

  • example/

    包含了普通消息发送、Oneway 消息发送、顺序消息发送、普通消息消费、顺序消息消费等例子,Linux 下还包含了 Makefile 用于 example 的编译和管理。

  • include/

    包含了用户自己编写的程序需要的头文件。

  • lib/

    • Linux SDK 子目录如下,分别是 64 的静态库和动态库。

      1. lib-boost-share/
      2. libonsclient4cpp.so
      3. lib-boost-static/
      4. libonsclient4cpp.a
    • Windows SDK 子目录如下,是 64 位系统下 SDK 的 dll 库。如果没有安装 Visual Studio 2015 环境下,需要拷贝安装 vc_redist.x64。 这是 Visual C++ 2015 的运行时环境。

      1. 64/
      2. vc_redist.x64
  • SDK_GUIDE.pdf

    SDK 环境准备文档和 FAQ。

  • changelog

    新版本发布解决的问题和引入的新特性列表。

Linux C++ SDK

自 2016 年 12 月 2 日开始,Linux CPP 版本依赖了高性能 boost 库(1.62.0 版本),不仅降低了 CPU 资源占用率,而且提高了运行效率。目前主要依赖了 boost_systemboost_threadboost_chronoboost_filesystem 四个库,有静态库动态库两种解决方案。

静态解决方案

消息队列 MQ 的库文件在 lib/lib-boost-static 目录下,boost 库静态链接到 libonsclient4cpp.a 中。对于没有依赖 boost 库的业务方,可以直接选用静态库方案。静态库方案中,相应的 boost 库已经链接到 libonsclient4cpp.a,编译时只需要链接 libonsclient4cpp.a 即可,无需执行其他操作。使用方式如下:

  1. cd aliyun-mq-linux-cpp-sdk //下载的 SDK 解压后的路径
  2. cd example //进入 example 目录,修改 example 文件,填入您创建的 Topic 和 Key 等相关的信息
  3. make static=1

注意: 完全的静态链接请确保机器上安装了 libstdc++、pthread 等相关的静态库。默认安装的 libstdc++ 是没有安装静态库的,所以需要通过 yum 或者 > apt-get 来安装相关的静态库。此外使用如上方式会出现一些警告信息如下:

  1. warning: Using 'gethostbyaddr' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

建议最佳的方式,不要使用完全的静态链接,而是只静态链接 onsclient4cpp,其他库动态链接即可。使用方式如下:

  1. 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 编译选项。

动态解决方案

消息队列 MQ 的库文件在 lib/lib-boost-share 目录下,需要业务方生成可执行文件时链接 boost 动态库和 libonsclient4cpp.so。对于业务方已经依赖了 boost 库,需要选择动态库方案的情况,对 boost 库的依赖需要做如下工作:

  1. 下载 boost 1.62.0 版本:

    boost 1.62.0

  2. 解压 boost 1.62.0:

    tar --bzip2 -xf /path/to/boost_1_62_0.tar.bz2

  3. 安装 boost 1.62.0 版本:

    1. 进入 boost 1.62.0 解压后的路径:cd path/to/boost_1_62_0

    2. 配置 boost:./bootstrap.sh

    3. 编译 boost: ./b2 link=shared runtime-link=shared

    4. 安装 boost: ./b2 install

  4. 执行 ldconfig -v|grep libboost。如果有相关的输出,则表明 boost 动态库在动态库搜索路径中。

  5. 生成可执行文件时,需要链接 boost 动态库和消息队列 MQ 的动态库。 方法如下:

    1. cd aliyun-mq-linux-cpp-sdk //下载的 SDK 解压后的路径
    2. cd example //进入 example 目录,修改 example 文件,填入自己在消息队列 MQ 控制台创建的 Topic 和 Key 等相关的信息
    3. g++ -Wall -Wno-deprecated -L ../lib/lib-boost-share/ -I ../include/ ProducerExampleForEx.cpp -lonsclient4cpp -lboost_system -lboost_thread -lboost_chrono -lboost_filesystem -lpthread
    4. export LD_LIBRARY_PATH="../lib/lib-boost-share/" //添加动态载入的搜索路径
    5. ./a.out //运行程序

Windows C++ SDK

Visual Studio 2015 环境下使用 C++ SDK

  1. 使用 Visual Studio 2015 创建自己的项目。

    创建自己的项目1

    创建自己的项目2

    创建自己的项目3

  2. 右键单击项目,选择属性 > 配置管理器,设置活动解决方案配置为 release,设置活动解决方案平台为 x64

    平台配置1

    平台配置2

  3. 右键单击项目,依次选择属性 > 配置属性 > 常规 > 输出目录/A。按照活动解决方案平台的设置,拷贝 64 位 lib 目录下的所有文件到输出目录 /A

    设置输出目录

  4. 右键单击项目,依次选择属性 > 配置属性 > C/C++-常规 > 附加包含目录/B。 拷贝 include 目录下的头文件到包含目录: /B

    配置头文件1

    配置头文件2

  5. 右键单击项目,依次选择属性 > 配置属性 > 链接 > 常规 > 附加库目录/A

    附加库设置

  6. 右键单击项目,依次选择属性 > 配置属性 > 链接 > 输入 > 附加依赖项ONSClient4CPP.lib

    ONSCLient4CPP.lib设置

  7. 右键单击项目,依次选择属性 > 配置属性 > C/C++-常规 > 预处理器定义: 添加 WIN32 宏。

    设置win32宏

Visual Studio 非 2015 环境下使用 C++ SDK

  1. 首先需要按照 Visual Studio 2015 的环境来配置,配置过程同 Visual Studio 2015 环境下使用 C++ SDK

  2. 安装 vc_redist.x64。这是 Visual C++ 2015 的运行时环境。

    注意: 如果不想进行繁琐的设置,您也可以使用设置好的 SDK Demo,下载 SDK 后进行解压,然后进入 demo 目录,使用 Visual Studio 2015 打开工程。示例如下:

    demo_1

    demo 2

    demo 3

    到此为此就设置好编译环境了。单击 Build,即可编译出可执行的程序,然后拷贝 dll 到可执行程序的目录下即可运行,或者拷贝 dll 到系统目录下。

升级 v1.x.x 版本的 SDK 至 v2.0.0

目前最新版的 v2.0.0 SDK 和 v1.x.x SDK 保持 API 向前兼容(即新版本兼容旧版本),由于实现方式不同,ABI 是不兼容的。

请按照以下步骤升级:

  1. 将新版 SDK 的头文件替换老版本的头文件。

  2. 将新版本 lib 目录下的动态库全部拷贝到存放原版本动态库的目录下。

  3. 如果之前使用的是静态链接方案,去掉 -static 参数,修改为默认动态路链接方案。

  4. 修改编译脚本,增加 -l消息队列 MQ_client_core 参数,链接新版内核动态库。

  5. 重新编译工程。

  6. 若升级失败,则可选择回退,将工程恢复至升级前状态,重新编译即可。

更多信息