开源的 Go SDK 使用 cgo 封装 CPP SDK 连接阿里云 RocketMQ,因此在使用 Go SDK 之前需要安装对应的 CPP SDK 的动态库。本文介绍在使用 Go SDK 接入阿里云 RocketMQ 来收发消息前,需要做的准备工作。

前提条件

在开始做准备工作前,请确保您的操作系统满足以下条件:

  • Linux:CentOS 6.8、CentOS 7.2、RHEL 6.x、RHEL 7.x
  • Darwin:macOS Mojave 10.14.x
  • Docker:官方镜像 Go1.13

准备工作包含以下三个部分,每个部分针对不同的操作系统都提供了相应的操作步骤:

  1. 安装 CPP 动态库
  2. 安装 cgo
  3. 安装 Go SDK
说明 本文不提供 Go 环境的安装指导,请确保机器 Go 环境的版本号大于 1.10。

安装 CPP 动态库

注意 CPP 动态库默认安装到系统动态库目录下,请确保当前账号拥有 sudo 权限或请使用 root 账号来执行操作。

目前 CPP 的动态库已经提供了二进制 release,为方便下载,动态库可以从 OSS 上直接下载安装,针对不同的操作系统,可参考以下步骤。

  • CentOS 7.2 和 RHEL 7.x

    CentOS 默认支持 RPM 管理,RPM 包名为 t-rocketmq,可以执行以下 rpm 命令直接安装:

    rpm -ivh https://ons-client-sdk.oss-cn-hangzhou.aliyuncs.com/cpp-rpm/RHEL7/cgo/t-rocketmq-2.0.0-centos7.x86_64.rpm

    执行以下命令确保动态库安装成功(以下仅为示例,其它操作系统均可使用 ls 命令验证动态库是否安装成功):

    ls /usr/local/lib/librocketmq.so

    结果如下图所示。

    opensource-go-result
  • CentOS 6.8 和 RHEL 6.x

    CentOS 6.8 与 CentOS 7 相比,安装步骤相同,仅使用的 RPM 包不一样,参考以下命令:

    rpm -ivh https://ons-client-sdk.oss-cn-hangzhou.aliyuncs.com/cpp-rpm/RHEL6/cgo/t-rocketmq-2.0.0-centos6.x86_64.rpm

  • macOS Mojave 10.14

    macOS 下不提供包管理工具,可以执行以下命令手动安装动态库:

    wget -P /usr/local/lib https://ons-client-sdk.oss-cn-hangzhou.aliyuncs.com/cpp-rpm/darwin/librocketmq.dylib

    wget -P /usr/local/lib https://ons-client-sdk.oss-cn-hangzhou.aliyuncs.com/cpp-rpm/darwin/librocketmq_client_core.dylib

    wget -P /usr/local/include https://ons-client-sdk.oss-cn-hangzhou.aliyuncs.com/cpp-rpm/darwin/rocketmq.tar.gz

    tar -xzf /usr/local/include/rocketmq.tar.gz -C /usr/local/include/

    install_name_tool -id "@rpath/librocketmq_client_core.dylib" /usr/local/lib/librocketmq_client_core.dylib

  • Docker 官方镜像 Go1.13

    Docker 官方镜像的操作系统是 Debain 系统,使用的默认包管理工具为 dpkg,我们提供了 DEB 包,包名为 rocketmq_2.0.0_amd64.deb,可以执行以下命令安装:

    wget https://ons-client-sdk.oss-cn-hangzhou.aliyuncs.com/cpp-rpm/debian/cgo/rocketmq_2.0.0_amd64.deb

    dpkg -i rocketmq_2.0.0_amd64.deb

安装 cgo

由于 cgo 的编译链接需要 C 编译器,请安装 gcc 4.8.2 及以上版本或者 clang/llvm。

  • CentOS 7.2 和 RHEL 7.x

    CentOS 7.2 和 RHEL 7.x 下执行 yum 命令可以默认安装 4.8.5,命令如下:

    yum install gcc

    安装完成后可执行 gcc -v 命令验证,示例如下:

      [root@3471a968663d ~]# gcc -v
      Using built-in specs.
      COLLECT_GCC=gcc
      COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
      Target: x86_64-redhat-linux
      Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
      Thread model: posix
      gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)                    
  • CentOS 6.8 和 RHEL 6.x

    CentOS 6.8 和 RHEL 6.x 系统默认的 gcc 版本为 gcc 4.4.7,需要升级至 gcc 4.8,请执行以下命令:

    curl -Lks http://www.hop5.in/yum/el6/hop5.repo > /etc/yum.repos.d/hop5.repo

    yum install gcc gcc-g++ -y

  • macOS Mojave 10.14

    macOS Mojave 10.14 下默认为 clang/llvm10,满足要求,无需安装和升级,执行的命令示例如下:

      <username>MacBook-Pro:debian <username>$ clang -v
      Apple LLVM version 10.0.1 (clang-1001.0.46.4)
      Target: x86_64-apple-darwin18.7.0
      Thread model: posix
      InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin                    
  • Docker 官方镜像 Go1.13

    Docker 官方镜像 Go1.13,该镜像下 gcc 默认为 8.3,无需安装和升级,执行的命令示例如下:

      root@0324e2943e59:~# gcc -v
      Using built-in specs.
      COLLECT_GCC=gcc
      COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper
      OFFLOAD_TARGET_NAMES=nvptx-none
      OFFLOAD_TARGET_DEFAULT=1
      Target: x86_64-linux-gnu
      Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
      Thread model: posix
      gcc version 8.3.0 (Debian 8.3.0-6)                    

安装 Go SDK

您可选择以下任一方式安装 Go SDK:

  • 添加项目依赖

    如果项目本身使用了 go mod 等包管理工具,可以直接在 mod 中增加依赖即可。

    require github.com/apache/rocketmq-client-go v1.2.4

  • 自动安装

    同时也可以执行以下步骤自动安装对应版本安装,以 CentOS 7.2 为例:

    请选择开源 Go SDK 1.2.4 版本,该版本支持通过接入点的方式直接连接阿里云 RocketMQ。

    go get github.com/apache/rocketmq-client-go@v1.2.4

  • 手动安装

    如果自动失败,可以执行以下命令手动下载 Go SDK:

    go get -v github.com/apache/rocketmq-client-go

    然后进入到 GOPATH 目录下切换到对应的版本,并确保切换成功,可以到 demo 目录下执行 go build 验证,参考以下命令:

      [root@3471a968663d ~]# cd $GOPATH/src/github.com/apache/rocketmq-client-go
      [root@3471a968663d rocketmq-client-go]# git checkout v1.2.4
      [root@3471a968663d rocketmq-client-go]# git status
      # HEAD detached at v1.2.4
      nothing to commit, working directory 
      [root@3471a968663d demos]# go build producer.go                    

    执行完以上步骤,即已完成安装 Go SDK。

后续步骤