MQTT快速入门

更新时间:

作为使用和熟悉产品功能的入门指导,本文提供如何快速使用云消息队列 MQTT 版通过默认支持的MQTT协议收发消息的步骤。

对于非MQTT协议的接入,例如新能源,您必须首先购买云消息队列 MQTT 版企业铂金版,并通过专属通道享受对应的文档和技术支持服务。

说明

您可观看入门操作视频来快速上手云消息队列 MQTT 版。视频详细信息,请参见快速入门视频

注意事项

云消息队列 MQTT 版需搭配后端消息存储队列一起使用,具体说明如下:

  • 云消息队列 MQTT 版实例是一个无状态网关类型实例,用来完成IoT移动场景下的客户端连接维持和消息转发,本身并不提供消息数据持久化功能,具体的消息存储和消息数据持久化还需要配置一个消息存储实例。

  • 现阶段要求每个云消息队列 MQTT 版实例(网关实例)必须绑定一个存储实例(云消息队列 RocketMQ 版实例)使用。

  • 消息存储实例目前只支持云消息队列 RocketMQ 版类型的后端存储实例。

  • 目前您在同一个地域(Region)可以创建有限数量的云消息队列 MQTT 版实例,且一个云消息队列 MQTT 版实例仅可绑定一个相应的云消息队列 RocketMQ 版实例。同一地域的实例数量上限参考控制台具体提示。

在使用云消息队列 MQTT 版时,请注意以下网络访问限制:

只有在同一个地域下的同一个实例中的Topic和Group ID才能互通,例如,某Topic创建在华北2(北京)地域下的实例A中,那么该Topic只能被在华北2(北京)地域下的实例A中创建的Group ID对应的云消息队列 MQTT 版客户端(下文简称客户端)访问。

流程

快速入门流程展示了如何使用云消息队列 MQTT 版收发消息的流程。

图 1. 快速入门流程快速入门流程图

快速入门流程所示,使用客户端收发消息需要先创建相应资源,否则云消息队列 MQTT 版服务器会拒绝非法的Client ID的连接。

前提条件

  • 您已经开通母产品云消息队列 RocketMQ 版的服务。如未开通,请先开通该服务。

  • 您已经拥有了阿里云AccessKey(AK)。详细信息,请参见获取AccessKey

步骤一:创建资源

这里所说的资源包括:

  • 云消息队列 MQTT 版实例(用于客户端连接维持和消息转发)

  • 消息存储实例(用于消息的存储,目前只支持云消息队列 RocketMQ 版实例)

  • Topic(用于消息发送和订阅的消息一级主题,即父级Topic)

  • Group ID(用于客户端识别)

  1. 选择地域。

    请根据您的业务需求确定需要把资源创建在哪个地域。

    1. 登录微消息队列MQTT版控制台

    2. 在顶部菜单栏选择地域,例如华北2(北京)地域,即您要将资源创建在哪个地域。

  2. 创建云消息队列 MQTT 版实例。

    首先,您需要创建云消息队列 MQTT 版实例。创建前,请注意以下几点:

    • 您在每个地域下,所有类型的实例有总数量的限制,具体限制参考控制台的提示。

    • 请根据业务场景估算TPS、连接数和订阅关系,选择合理的规格。对于预付费类型(包年包月)的实例,如果选择过小的规格会触发服务限流影响业务。

    • 购买的基础版实例实时生效;购买的企业铂金版实例需要时间部署,实例可运行时会通知您。

    请按以下步骤创建云消息队列 MQTT 版实例:

    1. 在左侧导航栏,单击概览

    2. 在实例列表页面,单击新建实例

    3. 在购买页面,按需选择云消息队列 MQTT 版实例版本以及相应的配置,然后根据页面提示完成购买。

    回到控制台概览页面的实例列表,您可以看到已购买(创建)的云消息队列 MQTT 版实例。

  3. 创建并绑定数据存储实例。

    创建完云消息队列 MQTT 版实例后,您还需要创建用于存储Topic和消息的实例(目前仅支持云消息队列 RocketMQ 版的实例),然后将创建的云消息队列 RocketMQ 版的实例与云消息队列 MQTT 版实例进行一对一的绑定。

    绑定关系有以下限制:

    • 一个云消息队列 MQTT 版实例仅允许绑定一次,绑定成功后即不允许更改。

    • 一个存储型实例仅允许绑定到一个云消息队列 MQTT 版实例,不允许一对多绑定。

    • 绑定的这两个实例,命名空间类型必须一致,即独享命名空间的实例不允许和非独享命名空间的实例建立绑定关系。

    • 如果提前删除云消息队列 MQTT 版实例绑定的存储实例,则云消息队列 MQTT 版实例会不可用。

    请按以下步骤创建并绑定存储实例:

    1. 在左侧导航栏单击概览,选择您刚创建的云消息队列 MQTT 版实例,单击继续配置概览

    2. 消息持久化配置对话框,按实例情况和需求选择对应选项。

      • 如果您已购买云消息队列 RocketMQ 版实例,请选择选择已有实例。选择该选项后显示的是您已创建(购买)的消息存储实例列表。然后单击您已有的云消息队列 RocketMQ 版消息存储实例,再单击确认完成绑定。

        图 2. 选择已有实例选择已有实例

      • 如果您还未购买云消息队列 RocketMQ 版实例,请选择以下选项:

        • 新建共享实例:创建云消息队列 RocketMQ 版标准版实例。请输入实例名和描述,然后单击确认,完成创建。

          图 3. 新建共享实例新建共享实例

        • 购买铂金版实例:创建云消息队列 RocketMQ 版铂金版实例。选择购买铂金版实例,单击立即前往购买,然后按照页面提示完成购买(即创建)。

          图 4. 新建铂金版实例新建铂金版实例

        完成创建后,重复步骤i和步骤ii,并选择选择已有实例,然后单击刚刚创建的云消息队列 RocketMQ 版实例,再单击确认完成绑定。

  4. 创建Topic。

    使用MQTT协议收发消息,需要创建MQTT的父级Topic(Parent Topic)。多级子Topic无需创建,直接在代码中使用即可。

    云消息队列 MQTT 版实例和存储实例之间会建立一一绑定关系,因此,创建的Topic其实是创建到存储实例上,在云消息队列 MQTT 版控制台仅仅做一层映射关系,所有的Topic操作都可以同时使用存储实例的操作习惯完成。

    如果之前在使用云消息队列 RocketMQ 版时已经创建过Topic,也可以直接使用。如果没有创建过,请按照以下步骤进行创建:

    1. 在左侧导航栏单击消息存储

    2. Topic管理页面,选择您刚创建的云消息队列 MQTT 版实例,单击新建Topic

    3. 创建Topic对话框,输入Topic名称、选择该Topic用于存储和收发的消息类型、输入备注信息,然后单击确认

    说明

    如果需要使用云消息队列 MQTT 版客户端发送顺序消息,则此处需要选用顺序Topic,但云消息队列 MQTT 版客户端的消费场景暂时还不支持强顺序。

  5. 创建Group ID。

    云消息队列 MQTT 版的Group ID用于指定一组逻辑功能完全一致的节点共用的组名,代表一类相同功能的设备。Group ID和Device ID共同组成用于识别MQTT客户端的Client ID。更多信息请参见名词解释

    1. 在左侧导航栏,单击Group管理

    2. Group管理页面,选择您刚创建的云消息队列 MQTT 版实例,单击新建Group ID

      图 5. 创建Group ID创建Group ID

    3. 创建Group ID 对话框中,输入需要创建的Group ID,然后单击确定

    创建完成后,在Group管理页面中可以看到创建的Group ID。该页面显示当前地域下您拥有的所有Group ID。

    说明
    • 如果Group ID不再使用,请及时删除。

    • Group ID仅限创建账号使用,主账号创建的Group ID子账号无法使用,子账号的Group ID必须单独创建。

步骤二:获取接入点

在使用SDK收发消息时需要填写云消息队列 MQTT 版实例接入点。云消息队列 MQTT 版实例的接入点由“接入点域名+端口”组成。

云消息队列 MQTT 版实例和云消息队列 RocketMQ 版实例被成功绑定后,接入点信息便立即显示在获取接入点信息区域,您可直接获取该接入点信息。

成功绑定云消息队列 MQTT 版实例和云消息队列 RocketMQ 版实例后,也可按照以下步骤获取接入点:

  1. 在控制台顶部导航栏选择刚创建的资源所在地域,然后在左侧导航栏单击实例详情

  2. 在默认显示的实例详情页面,选择您创建的云消息队列 MQTT 版实例名称,单击实例信息页签。

  3. 实例信息页签的获取接入点信息区域,查看所需的接入点域名。

    图 6. 获取接入点获取接入点

云消息队列 MQTT 版同时提供了公网接入点VPC 接入点
  • 公网接入点为本地公网环境访问的IP地址,一般用于物联网和移动互联网场景中;
  • VPC 接入点为云上私网访问的IP地址,一般用于云端应用接入云消息队列 MQTT 版
重要 客户端使用接入点连接服务时务必使用域名接入,不得直接使用域名背后的IP地址直接连接,因为IP地址随时会变化。在以下使用情况中出现的问题云消息队列 MQTT 版产品方概不负责:
  • 客户端不使用域名接入而是使用IP地址接入,产品方更新了域名解析导致原有IP地址失效。
  • 客户端网络对IP地址设置网络防火墙策略,产品方更新了域名解析后新IP地址被您的防火墙策略拦截。

端口

目前云消息队列 MQTT 版除了支持标准的MQTT on TCP协议,还支持MQTT SSL、WebSocket、WebScoket SSL/TLS、Flash。对应的服务端口如端口说明所示,请根据实际需求修改。

说明

云消息队列 MQTT 版目前提供的是单向SSL加密,所以无需客户端上传证书。其次,服务端的证书会随着请求握手自动下发,并且是和接入点域名强绑定的,所以目前不支持自定义证书加密。

表 1. 端口说明

标准协议端口

SSL端口

WebSocket端口

WebSocket SSL/TLS端口

Flash端口

1883

8883

80

443

843

步骤三:调用SDK发送和订阅消息

  1. 下载客户端的SDK。各语言SDK的下载地址,请参见SDK下载

    由于云消息队列 MQTT 版默认支持的是标准的MQTT协议,因此客户端SDK都是推荐开源的第三方SDK,如果有其他语言没有覆盖,可以自行搜索MQTT兼容的SDK测试。

  2. 下载Demo工程,以查看对应的参数说明,然后您可以运行Demo发送和订阅消息。Demo下载地址,请参见Demo工程

    目前的Demo程序库只覆盖了一部分主流语言,后续会陆续更新。如果没有覆盖对应的开发语言,可以参考Java语言的Demo来修改。Demo工程仅提供一个基本的功能展示,具体应用到线上环境,务必修改所有参数。

更多信息

除了通过调用SDK/API发送消息,您可以在控制台发送消息来快速验证Topic的可用性,具体操作步骤如下:

  1. 在控制台左侧导航栏,单击消息存储

  2. 消息存储页面的Topic列表,找到您刚刚创建的Topic,单击右侧操作列的发送

    图 7. 发送消息发送消息

  3. 发送消息对话框中设置消息属性并输入消息内容,然后单击确定

    控制台会返回消息发送成功通知和相应的Message ID。

    图 8. 发送成功消息发送成功