更新时间:2024-10-29 GMT+08:00

快速连接RabbitMQ并生产消费消息

本文将为您介绍分布式消息服务RabbitMQ版入门的使用流程,以创建一个未开启SSL的RabbitMQ实例,客户端使用内网通过同一个VPC连接RabbitMQ实例生产消费消息为例,帮助您快速上手RabbitMQ。

图1 RabbitMQ使用流程
  1. 准备工作

    RabbitMQ实例运行于虚拟私有云(Virtual Private Cloud,以下简称VPC)中,在创建实例前需要确保有可用的虚拟私有云。

  2. 创建RabbitMQ实例

    在创建实例时,您可以根据需求选择需要的实例规格和数量。

  3. 连接实例

    客户端以RabbitMQ提供的demo,连接未开启SSL的实例。

步骤一:准备工作

  1. 为用户添加RabbitMQ实例的操作权限。

    如果您需要对云上的资源进行精细管理,请使用统一身份认证服务(Identity and Access Management,简称IAM)创建IAM用户及用户组,并授权,以使得IAM用户获得RabbitMQ实例的操作权限。具体操作请参考创建用户并授权使用DMS for RabbitMQ

  2. 创建VPC和子网。

    在创建RabbitMQ实例前,确保已存在可用的VPC和子网。创建VPC和子网的具体步骤,请参考创建虚拟私有云和子网

    创建的VPC与RabbitMQ实例必须在相同的区域。

  3. 创建安全组并添加安全组规则。

    在创建RabbitMQ实例前,确保已存在可用的安全组。创建安全组的具体步骤,请参考创建安全组

    连接RabbitMQ实例前,请添加表1所示安全组规则,其他规则请根据实际需要添加。
    表1 安全组规则

    方向

    协议

    端口

    源地址

    说明

    入方向

    TCP

    5672

    0.0.0.0/0

    访问RabbitMQ实例(关闭SSL加密)。

    安全组创建后,系统默认添加入方向“允许安全组内的弹性云服务器彼此通信”规则和出方向“放通全部流量”规则。此时使用内网通过同一个VPC访问RabbitMQ实例,无需添加表1的规则。

  4. 构建生产消费客户端。

    本文以Linux系统的弹性云服务器(Elastic Cloud Server,简称ECS)作为生产消费客户端。在创建RabbitMQ实例前,请先创建开启弹性公网IP的ECS、安装JDK以及配置环境变量。
    1. 登录管理控制台,在左上角单击,选择“计算 > 弹性云服务器”,创建一个ECS实例。

      创建ECS的具体步骤,请参考创建弹性云服务器。如果您已有可用的ECS,可重复使用,不需要再次创建。

    2. 使用root用户登录ECS。
    3. 安装Java JDK,并配置JAVA_HOME与PATH环境变量。
      1. 下载Java JDK。

        ECS默认自带的JDK可能不符合要求,例如OpenJDK,需要配置为Oracle的JDK,可至Oracle官方下载页面下载Java Development Kit 1.8.111及以上版本

      2. 解压Java JDK。
        tar -zxvf jdk-8u321-linux-x64.tar.gz

        “jdk-8u321-linux-x64.tar.gz”为JDK的版本,请根据实际情况修改。

      3. 打开“.bash_profile”文件。
        vim ~/.bash_profile
      4. 添加如下内容。
        export JAVA_HOME=/opt/java/jdk1.8.0_321 
        export PATH=$JAVA_HOME/bin:$PATH

        “/opt/java/jdk1.8.0_321”为JDK的安装路径,请根据实际情况修改。

      5. 按“Esc”,然后输入以下命令,按“Enter”,保存并退出“.bash_profile”文件。
        :wq
      6. 执行如下命令使修改生效。
        source .bash_profile
      7. 查看Java JDK是否安装成功。
        java -version
        回显信息中包含如下信息,表示Java JDK安装成功。
        java version "1.8.0_321"

步骤二:创建RabbitMQ实例

  1. 登录分布式消息服务RabbitMQ控制台,单击页面右上方的“购买RabbitMQ实例”。
  2. 设置实例基础信息,配置详情请参考表2

    表2 设置实例基础信息

    参数

    说明

    计费模式

    选择“按需计费”,即先使用再付费,按照RabbitMQ实例实际使用时长计费,秒级计费,按小时结算。

    区域

    不同区域的云服务产品之间内网互不相通。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。

    选择“阿联酋-阿布扎比”。

    项目

    每个区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源)。

    选择“阿联酋-阿布扎比(默认)”。

    可用区

    可用区指在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。

    选择“可用区1”。

    实例名称

    实例名称支持自定义,但需要符合命名规则:长度为4~64个字符,由英文字母开头,只能由英文字母、数字、中划线、下划线组成。

    输入“rabbitmq-test”。

    企业项目

    该参数针对企业用户使用。企业项目是对企业不同项目间资源的分组和管理,属于逻辑隔离。

    选择“default”。

    版本

    RabbitMQ的版本号。

    选择“3.8.35”。

    部署架构

    选择“单机”,表示部署一个RabbitMQ代理。

    CPU架构

    支持“x86计算”。

    保持默认值。

    代理规格

    根据业务需求选择相应的代理规格。

    选择“rabbitmq.2u4g.single”。

    代理数量

    默认为“1”,不支持修改。

    单个代理存储空间

    根据实际需要选择存储RabbitMQ数据的磁盘类型和磁盘大小。

    实例总存储空间 = 单个代理的存储空间 * 代理数量,RabbitMQ实例创建后,磁盘类型不支持修改。

    磁盘类型选择“超高I/O”,磁盘大小设置为“100GB”。

    磁盘加密

    选择“不开启”。

  3. 设置实例网络环境信息,配置详情请参考表3

    表3 设置实例网络环境信息

    参数

    说明

    虚拟私有云

    虚拟私有云和子网在RabbitMQ实例创建完成后,不支持修改。

    选择准备工作中设置好的虚拟私有云和子网。

    安全组

    选择准备工作中设置好的安全组。

  4. 设置实例的访问方式,配置详情请参考表4

    表4 设置实例的访问方式

    参数

    说明

    SSL

    选择“不开启”。

    用户名

    设置连接RabbitMQ实例的用户名。

    用户名需要符合以下命名规则:由英文字母开头,且只能由英文字母、数字、中划线、下划线组成,长度为4~64个字符。

    输入“test”。

    密码

    设置连接RabbitMQ实例的密码。

    密码需要符合以下命名规则:

    • 长度为8~32个字符。
    • 至少包含以下字符中的3种:大写字母、小写字母、数字、特殊字符`~!@#$%^&*()-_=+\|[{}];:'",<.>? 和空格,并且不能以-开头。
    • 不能与用户名或倒序的用户名相同。

  5. 不设置“更多配置”,保持默认即可。
  6. 填写完上述信息后,单击“立即购买”,进入“规格确认”页面。
  7. 确认实例信息无误后,提交请求。
  8. 在实例列表页面查看实例是否创建成功。

    创建实例大约需要3到15分钟,此时实例的“状态”为“创建中”。
    • 当实例的“状态”变为“运行中”时,说明实例创建成功。
    • 当实例的“状态”变为“创建失败”,请删除创建失败的RabbitMQ实例,然后重新购买。如果重新购买仍然失败,请联系客服。

  9. 实例创建成功后,单击实例名称,进入实例详情页。
  10. 在“连接信息”区域,查看并记录连接地址。

步骤三:连接实例生产消费消息

  1. 进入ECS的“root”目录下,下载RabbitMQ-Tutorial.zip示例工程代码。

    wget https://dms-demo.obs.cn-north-1.myhuaweicloud.com/RabbitMQ-Tutorial.zip

    “/root”为示例工程代码存放路径,请根据实际情况修改。

  2. 解压RabbitMQ-Tutorial.zip压缩包。

    unzip RabbitMQ-Tutorial.zip

  3. 进入RabbitMQ-Tutorial目录,该目录下包含预编译好的jar文件。

    cd RabbitMQ-Tutorial

  4. 运行生产消息示例。

    java -cp .:rabbitmq-tutorial.jar Send ${host} ${port} ${user} ${password}

    参数说明如下:

    • host:从创建实例中获取的连接地址。
    • port:RabbitMQ实例的连接端口,输入5672。
    • user:创建实例时,设置的用户名。
    • password:创建实例时,设置的密码。

    生产消息示例如下:

    [root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 192.168.xx.40 5672 test Zxxxxxxs
     [x] Sent 'Hello World!'
    [root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 192.168.xx.40 5672 test Zxxxxxxs
     [x] Sent 'Hello World!'

  5. 运行消费消息示例。

    java -cp .:rabbitmq-tutorial.jar Recv ${host} ${port} ${user} ${password}

    参数说明如下:

    • host:从创建实例中获取的连接地址。
    • port:RabbitMQ实例的连接端口,输入5672。
    • user:创建实例时,设置的用户名。
    • password:创建实例时,设置的密码。

    消费消息示例如下:

    [root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Recv 192.168.xx.40 5672 test Zxxxxxxs
     [*] Waiting for messages. To exit press CTRL+C
     [x] Received 'Hello World!'
     [x] Received 'Hello World!'

    如需停止消费使用Ctrl+C命令退出。