MQTT客户端的上下线事件将会触发MQTT服务端生成一条通知消息,微消息队列MQTT版支持将该条消息数据导出至其他阿里云产品,并使用MQTT的Java SDK实现MQTT客户端与后端应用收发消息。本文以当前仅支持的消息队列RocketMQ版数据互通为例进行说明。

前提条件

  • 安装IDE。您可以使用IntelliJ IDEA或者Eclipse,本文以IntelliJ IDEA为例。
  • 下载安装JDK
  • 在公网地域,创建消息队列RocketMQ版实例、Topic以及Group ID。详情请参见创建资源

背景信息

您可以通过配置客户端上下线通知规则来将MQTT客户端的上下线事件通知的数据导出至其他阿里云产品。

本文以公网环境中的Java SDK为例说明微消息队列MQTT版如何将MQTT客户端上下线事件通知的消息发送至后端应用。

此场景下可使用多语言的第三方开源SDK来实现消息收发。更多信息,请参见SDK 下载

quick_start_client_stats_notify

如上图所示,您的后端应用和MQTT客户端均通过Java语言开发。您部署在公网环境中的MQTT客户端上线或下线时,会触发MQTT服务生成一条事件消息,您可以通过配置客户端上下线通知规则将该通知消息经过消息队列RocketMQ版发送至后端应用。两个产品的服务端通过各自产品提供的Java SDK分别与各自的客户端实现消息收发。

客户端上下线通知功能的更多信息,请参见MQTT 客户端上下线事件数据流出

说明 消息队列RocketMQ版微消息队列MQTT版的Topic不能跨地域使用,因此,本文中所有资源都应在公网地域创建。详情请参见Topic地域化

网络访问

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

使用流程

MQTT客户端上下线通知的消息收发流程如下图所示。

quick_start_client_status_notify_process

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

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

步骤二:创建父级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。

步骤四:创建客户端上下线通知规则

规则中填写的参数需与您创建的资源保持一致。

  1. 在左侧导航栏,选择规则管理 > 创建规则
  2. 创建规则面板,单击上下线通知页签。
  3. 上下线通知页签,按提示填写以下参数,单击确定
    参数 取值示例 说明
    规则 ID 111111 规则的全局唯一标识,说明如下:
    • 只能包含字母、数字、横划线(-)和下划线(_),至少包含一个字母或数字。
    • 名称长度限制在 3~64 字符之间,长于 64 字符将被自动截取。
    • 创建后无法更新。
    规则描述 migrate from rocketmq 对规则的描述。
    状态 启用 是否启用当前规则,取值说明如下:
    • 启用
    • 禁用
    设备组
    Group ID GID_Client_Status 指定需导出数据的设备组。Group ID 详情请参见名词解释
    通知
    说明 当前仅支持消息队列RocketMQ版
    云产品 消息队列 RocketMQ 指定您需将 MQTT 客户端上下线通知流转至哪个目标云产品,即消息队列 RocketMQ 版。
    实例 ID MQ_INST_13801563067*****_BbyOD2jQ 指定的目标云产品的实例 ID,即消息队列 RocketMQ 版的实例 ID。
    Topic Topic_test 指定的目标云产品的资源键值,即消息队列 RocketMQ 版的 Topic。MQTT 客户端上下线通知信息将流转至 Topic_test。
    您可以在规则管理的规则列表查看到刚创建的上下线通知规则。

步骤五:调用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.openservices</groupId>
                <artifactId>ons-client</artifactId>
                <version>1.8.5.Final</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>
    说明 ons-client的版本详情请参见版本说明
  5. MQTTClientStatusNoticeProcessDemo.java类中,按代码注释说明填写相应参数,主要涉及步骤一至步骤三所创建的MQTT资源以及您在消息队列RocketMQ版创建的相应资源,然后执行Main函数运行代码实现消息收发。
    示例代码详情请参见MQTTClientStatusNoticeProcessDemo.java

结果验证

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

更多信息