全部产品
阿里云办公

Demo 工程

更新时间:2018-12-03 20:46:17

本 Demo 主要目的在于帮助初次接触 MQ 的工程师,一步一步搭建 MQ 测试工程。 Demo 程序以 Java 为例,包括普通消息、事务消息、定时消息的测试代码,以及相关 Spring 的配置示例。

准备 Demo 环境

步骤一:安装 IDE

您可以使用 IDEA 或者 Eclipse。 本文以 IDEA 为例。

请在 https://www.jetbrains.com/idea/ 下载 IDEA Ultimate 版本,并参考 IDEA 说明进行安装。

步骤二:下载 MQ Demo 工程

https://github.com/AliwareMQ/mq-demo 下载 MQ Demo 工程到本地,然后解压即可看到本地新增了 Aliware-MQ-demo-master 文件夹。

Demo 工程设置包含以下几个步骤。

配置 Demo 工程

步骤一:将 MQ Demo 工程文件导入 IDEA

前提条件:如果本地未安装 JDK,请先下载安装。

  1. 在 IDEA 界面,选择 Import Project,选择 mq-demo-master 文件夹。

    IDEA Import Demo

  2. 选择 Import 类型。

    idea-import-2

  3. 默认单击 Next,直到导入完成。 Demo 工程需要加载依赖的 JAR 包,因此导入过程需要等待2-3分钟。

步骤二:创建资源

请在 MQ 控制台创建 Topic、Producer ID (PID)、Consumer ID (CID)。

  1. 登录 MQ 控制台。

  2. 选择公网 域(默认),单击右侧创建 Topic,输入 Topic 名称(尽量个性化避免重复)、选择消息类型、输入描述,然后单击确定

  3. 在 Topic 管理列表中单击创建生产者创建 Producer ID。

  4. 在 Topic 管理列表中单击创建者消费者创建 Consumer ID。

更多详细信息,请参见主账号-快速入门中的步骤二:创建资源

步骤三:配置 MQ Demo

需要配置3个文件:MqConfig 类、producer.xml、consumer.xml。

  1. 按以下说明配置 MqConfig 类。

    • public static final String TOPIC = “刚才创建的 Topic”;
    • public static final String PRODUCER_ID = “刚才创建的 PID”;
    • public static final String CONSUMER_ID = “刚才创建的 CID”;
    • public static final String ACCESS_KEY = “您的阿里云账号的 AK”;
    • public static final String SECRET_KEY = “您的阿里云账号的 SK”;

    AK SK 获取:请登录阿里云账号,点击 AccessKeys。 AK 即 Access Key ID,SK 即 Access Key Secret。

    说明: 主账号创建 Topic 后,如果在 MQ 控制台的 Topic 管理列表里对子账号进行了授权,那么也可以使用 RAM 子账号的 AK SK。

  2. 配置 producer.xml。

    1. <bean id="producer" class="com.aliyun.openservices.ons.api.bean.ProducerBean"
    2. init-method="start" destory-method="shutdown">
    3. <property name="properties">
    4. <map>
    5. <entry key="ProducerId" value="XXX"/><!——CID,请替换——>
    6. <entry key="AccessKey" value="XXX"/><!——ACCESS_KEY,请替换——>
    7. <entry key="SecretKey" value="XXX"/><!——SECRET KEY,请替换——>
    8. <entry key="ONSAddr" value="http://onsaddr-internet.aliyun.com/rocketmq/nsaddr4client-internet"/>
    9. </map>
    10. </property>
    11. </bean>
  3. 配置 consumer.xml。

    1. <bean id="consumer" class="com.aliyun.openservices.ons.api.bean.Consumerbean"
    2. init-method="start" destory-method="shutdown">
    3. <property name="properties">
    4. <map>
    5. <entry key="ConsumerId" value="XXX"/><!——CID,请替换——>
    6. <entry key="AccessKey" value="XXX"/><!——ACCESS_KEY,请替换——>
    7. <entry key="SecretKey" value="XXX"/><!——SECRET KEY,请替换——>
    8. <entry key="ONSAddr" value="http://onsaddr-internet.aliyun.com/rocketmq/nsaddr4client-internet"/>
    9. </map>
    10. </property>
    11. <property name="subscriptionTable">
    12. <map>
    13. <entry value-ref="messageListener">
    14. <key>
    15. <bean class="com.aliyun.openservices.ons.api.bean.Subscription">
    16. <property name="topic" value="XXX"/><!——Topic,请替换——>
    17. <property name="expression" value="*"/><!——MessageType名:多个messageType "||"分割——>
    18. </bean>
    19. </key>
    20. </entry>
    21. </map>
    22. </property>
    23. </bean>

运行 Demo

以 Main 方式启动收发普通消息

  1. 运行 SimpleMQProducer 类发送消息。

  2. 登录 MQ 控制台,在左侧菜单栏选择消息查询>按 Topic 查询,选择 Topic 名称进行查询。 可以看见消息已经发送至 Topic。

  3. 运行 SimpleMQConsumer 类接收消息。 可以看到消息被接收打印的日志。 因为有初始化,所以需等待几秒,在生产环境中不会经常初始化。

从 MQ 控制台进入消费者管理>消费者状态,在消费者状态信息页面可以看到启动的消费端已经在线,并且订阅关系一致。

以 Spring 方式启动收发普通消息

  1. 运行 MQProducer4Spring 类发送消息。
  2. 运行 MQConsumer4Spring 类接收消息。

查看结果跟上面过程类似。

发送事务消息

运行 SimpleTransactionProducer 类发送消息。

说明:LocalTransactionCheckerImpl 类为本地事务 check 接口类。 用于校验事务。 详情请参考收发事务消息

收发顺序消息

运行 SimpleOrderConsumer 类接收消息。

运行 SimpleOrderProducer 类发送消息。

说明:此方式下,消息发布和消费都按顺序进行。 详情请参考收发顺序消息

发送定时(延时)消息

运行 MQTimerProducer 类发送消息。 延时3秒后投递。

说明:您也可以指定一个精确的投递时间,最长定时时间为 40 天。 具体请参考收发定时消息