作为使用和熟悉产品功能的入门指导,本文提供如何快速使用微消息队列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
      图 5. 创建Topic
      创建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
      图 6. 创建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. 实例信息页签的获取接入点信息区域,查看所需的接入点域名。
    图 7. 获取接入点
    获取接入点

微消息队列MQTT版同时提供了公网接入点经典网接入点VPC接入点。在物联网和移动互联网的场景中,客户端推荐使用公网接入点接入;经典网络和VPC接入点仅供一些特殊场景使用。因为一般而言,涉及部署在云端服务器上的应用的场景,建议使用服务端消息产品例如消息队列RocketMQ版实现。

说明 客户端使用接入点连接服务时务必使用域名接入,不得直接使用域名背后的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端口
1883888380443843

步骤三:调用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,单击右侧操作列的发送
    图 8. 发送消息
    发送消息
  3. 发送消息对话框中设置消息属性并输入消息内容,然后单击确定

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

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