全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
消息队列 MQ

步骤三:发送消息

更新时间:2017-08-23 18:34:51

在控制台申请 Topic 资源后,您可以通过控制台发送消息或者调用 SDK/API 发送消息。控制台发送消息主要用于快速验证 Topic 资源的可用性,在生产环境下使用 MQ 建议调用相关的 SDK/API 进行消息发送。

控制台发送消息

控制台发送消息步骤:

  1. 在 MQ 控制台的左侧菜单栏依次单击发布订阅管理>发布管理

  2. 在消息列表中找到您刚刚创建的 Topic,单击右侧操作选项里的发送

  3. 发送消息对话框输入消息的具体内容,比如“Hello MQ!”,单击确定。控制台会返回消息发送成功通知以及相应的 Message ID。

    send_msg

调用 SDK/API 发送消息

在生产环境使用 MQ,建议调用 SDK/API 来进行消息发送。本文以 TCP 协议下调用 Java SDK 为例进行说明。如果需要使用其他协议或者开发语言请参见帮助中心相关文档。

调用 TCP Java SDK 发送消息

  1. 通过下面两种方式可以引入依赖(任选一种):

    • Maven 方式引入依赖:

      1. <dependency>
      2. <groupId>com.aliyun.openservices</groupId>
      3. <artifactId>ons-client</artifactId>
      4. <version>1.2.1</version>
      5. </dependency>
    • 下载依赖 JAR 包:下载链接

  2. TCP 接入点域名,请前往查看。

  3. 根据以下说明设置相关参数,运行示例代码:

    1. public class ProducerTest {
    2. public static void main(String[] args) {
    3. Properties properties = new Properties();
    4. // 您在MQ控制台创建的Producer ID
    5. properties.put(PropertyKeyConst.ProducerId, "XXX");
    6. // 鉴权用AccessKey,在阿里云服务器管理控制台创建
    7. properties.put(PropertyKeyConst.AccessKey,"XXX");
    8. // 鉴权用SecretKey,在阿里云服务器管理控制台创建
    9. properties.put(PropertyKeyConst.SecretKey, "XXX");
    10. // 设置 TCP 接入域名(此处以公共云的公网接入为例)
    11. properties.put(PropertyKeyConst.ONSAddr,
    12. "http://onsaddr-internet.aliyun.com/rocketmq/nsaddr4client-internet");
    13. Producer producer = ONSFactory.createProducer(properties);
    14. // 在发送消息前,必须调用start方法来启动Producer,只需调用一次即可
    15. producer.start();
    16. //循环发送消息
    17. while(true){
    18. Message msg = new Message( //
    19. // 在控制台创建的Topic,即该消息所属的Topic名称
    20. "TopicTestMQ",
    21. // Message Tag,
    22. // 可理解为Gmail中的标签,对消息进行再归类,方便Consumer指定过滤条件在MQ服务器过滤
    23. "TagA",
    24. // Message Body
    25. // 任何二进制形式的数据, MQ不做任何干预,
    26. // 需要Producer与Consumer协商好一致的序列化和反序列化方式
    27. "Hello MQ".getBytes());
    28. // 设置代表消息的业务关键属性,请尽可能全局唯一,以方便您在无法正常收到消息情况下,可通过MQ控制台查询消息并补发
    29. // 注意:不设置也不会影响消息正常收发
    30. msg.setKey("ORDERID_100");
    31. // 发送消息,只要不抛异常就是成功
    32. // 打印Message ID,以便用于消息发送状态查询
    33. SendResult sendResult = producer.send(msg);
    34. System.out.println("Send Message success. Message ID is: " + sendResult.getMessageId());
    35. }
    36. // 在应用退出前,可以销毁Producer对象
    37. // 注意:如果不销毁也没有问题
    38. producer.shutdown();
    39. }
    40. }

查看消息是否发送成功

消息发送后,您可以在控制台查看消息发送状态。

  1. 在 MQ 控制台左侧菜单栏依次单击消息查询>Message ID 查询

  2. 在 Message ID 查询页面输入发送消息后返回的 Message ID,单击搜索查询消息发送状态,如下图所示。

    msg_query

    StoreTime 表示 MQ 服务端存储这条消息的时间。如果查询到此消息,表示消息已经成功发送到服务端。

注意:此步骤演示的是第一次使用 MQ 的场景,此时订阅端从未启动过,所以消息状态显示“暂无消费数据”。要启动订阅端并进行消息订阅请继续下一步操作订阅消息。更多消息状态请参考查询消息

本文导读目录