本文介绍如何快速使用微消息队列 MQTT 版的 Java SDK 实现 MQTT 客户端消息的自发自收。本场景示例不涉及跨云产品的数据互通。

前提条件

  • 安装 IDE。您可以使用 IntelliJ IDEA 或者 Eclipse,本文以 IntelliJ IDEA 为例。
  • 下载安装 JDK

背景信息

微消息队列 MQTT 版最简单的使用场景即是 MQTT 客户端消息的自发自收。此场景下可使用多语言的第三方开源 SDK 来实现消息收发。目前支持的语言详情请参见 SDK 下载

本文以公网环境中的 Java SDK 为例说明如何实现 MQTT 客户端消息的自发自收。

mqtt_client_send_receive

如上图所示,在物联网和移动互联网场景中,您部署在公网的 MQTT 客户端采用 Java 语言开发,需要与阿里云 MQTT 服务端实现消息收发。那么您需要在您的 MQTT 客户端代码中,嵌入 Java SDK 的相应代码,并在 SDK 中配置相应参数以与 MQTT 服务端通信。

网络访问

微消息队列 MQTT 版同时提供了公网接入点经典网接入点VPC 接入点。接入点说明如下:
  • 在物联网和移动互联网的场景中,客户端推荐使用公网接入点接入。
  • 经典网接入点VPC 接入点仅供一些特殊场景使用。因为一般而言,涉及部署在云端服务器上的应用的场景,建议使用服务端消息产品例如消息队列 RocketMQ 版实现。
注意 客户端使用接入点连接服务时务必使用域名接入,不得直接使用域名背后的 IP 地址直接连接,因为 IP 地址随时会变化。在以下使用情况中出现的问题微消息队列 MQTT 版产品方概不负责:
  • 客户端不使用域名接入而是使用 IP 地址接入,产品方更新了域名解析导致原有 IP 地址失效。
  • 客户端网络对 IP 地址设置网络防火墙策略,产品方更新了域名解析后新 IP 地址被您的防火墙策略拦截。
本文以公网接入点为例。微消息队列 MQTT 版消息队列 RocketMQ 版的应用场景对比和消息属性映射关系请参见以下文档:

使用流程

调用 MQTT 的 Java SDK 收发消息的流程如下图所示。quick_start_no_cross_product

步骤一:创建实例并获取接入点

  1. 登录微消息队列 MQTT 版控制台,在顶部菜单栏选择实例所在地域。
  2. 概览页面的实例列表区域,单击 点击这里创建您的第一个实例
  3. 在售卖页面,按需选择您所需的实例规格,单击立即购买
    您可购买包年包月或按量付费实例,两种实例的计费详情请参见计费说明。此处以按量付费实例为例。select_instance_type
  4. 确认订单页面,选中相应服务协议,单击去支付
    此处以按量付费实例为例。common_buy_mqtt
    支付完成后,即可看到以下界面,说明已购买成功。create_success
  5. 回到微消息队列 MQTT 版控制台,在左侧导航栏,选择实例详情 > 实例信息
  6. 实例信息页签的获取接入点信息 区域,即可看到接入点信息,本文示例以公网接入点为例。

步骤二:创建父级 Topic

MQTT 协议支持多级 Topic,父级 Topic 需在控制台或调用 OpenAPI 创建,子级 Topic 无需创建,Topic 详情请参见名词解释。本文以在控制台创建父级 Topic 为例。

  1. 在左侧导航栏,选择 Topic 管理 > 创建 Topic
  2. 创建 Topic 对话框,输入 Topic 以及描述,单击确认
    您可以在 Topic 管理页面查看刚创建的 Topic。

步骤三:创建 Group ID

Group ID 详情请参见名词解释

  1. 在左侧导航栏,选择 Group 管理 > 创建 Group ID
  2. 创建 Group ID 对话框,输入 Group ID,然后单击确认
    您可以在 Group ID 列表中查看到刚创建的 Group ID。

步骤四:调用 Java SDK 收发消息

  1. 下载第三方的开源 Java SDK。下载地址为 Eclipse Paho Java Client
  2. 下载阿里云 MQTT 的 Java SDK 的 Demo 示例作为您代码开发的参考。下载地址为 mqtt-java-demo
  3. 解压该 Demo 工程包至您指定的文件夹。
  4. 在 Intellij IDEA 中,导入解压后的文件以创建相应的工程,并确认 pom.xml 中已包含以下依赖。
    <dependencies>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.10</version>
            </dependency>
            <dependency>
                <groupId>org.eclipse.paho</groupId>
                <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
                <version>1.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.2</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.48</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-onsmqtt</artifactId>
                <version>1.0.3</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>4.5.0</version>
            </dependency>
    </dependencies>
  5. MQ4IoTSendMessageToMQ4IoTUseSignatureMode.java 类中,按代码注释说明填写相应参数,主要涉及步骤一至步骤三所创建的 MQTT 资源,然后执行 Main 函数运行代码实现消息收发。
    示例代码详情请参见 MQTTSendMessageToMQTT

结果验证

完成消息收发后,您可在微消息队列 MQTT 版控制台查询轨迹以验证消息是否发送并接收成功。详情请参见查询消息轨迹

更多信息