玩转MQTT-阿里云之MQTT使用(下)

摘要

为使物联网项目在正式使用时,能顺利切换到具有高并发高负载能力的服务平台,对阿里云提供的MQTT服务进行使用验证。

引言

之前写“MQTT之阿里云使用-玩转阿里云”这篇文章时,由于时间关系(写文章也是要花费大量时间的),打算将内容拆分为两部分,将写好的一部分先发了出去,打算稍后再补充后续完结内容。

不成想,文章发出后,居然被管理员从首页移除,严重打击了本人原本不那么强悍的内心,导致一直不太有兴趣完成后续部分。

近来翻看自己的文章,发表这篇烂尾的文章居然是自己文章中阅读访问量最高的一篇。虽然文章内容组织比较凌乱,表述也不够好,在这9102年即将过去之际,还是打算来一个续篇,为自己忙忙碌碌(碌碌无为)的2019做个收尾。

MQTT服务验证

书接上回,我们说到了阿里云RocketMQ、MQTT服务的开通(MQTT消息的持久化依托MQ服务)、介绍了MQ、MQTT实例的创建,顶级Topic资源的创建,GroupID前缀的创建以及RAM帐号资源的创建及帐号授权。

一系列准备工作之后,准备开始使用MQTT消息中间件服务。

访问鉴权

使用微消息队列 MQTT 的客户端收发消息时,服务端会根据 MQTT 客户端设置的 Username 和 Password 参数来进行鉴权。

阿里云支持两种鉴权模式

签名验证:永久授权,适用于客户端安全受信任的场景

临时 Token 权限验证:临时授权,适用于客户端不安全的场景

具体鉴权认证的相关资料在这里,大家可自行访问阅读。https://help.aliyun.com/document_detail/54225.html

签名校验

简单介绍一下阿里云MQTT访问中的签名鉴权模式下的访问要点

1、 MQTT连接参数中ClientId必须以GroupID为前缀,以@@@作为连接符,连接自定义的客户ID

2、 MQTT连接参数中Username由鉴权模式名称、AccessKey、InstanceId 三部分组成,以 “|” 分隔。

3、 MQTT连接参数中Password是用AccessKey对应的AccessKeySecret对ClientId使用 HMAC-SHA1 方法进行签名计算得到一个二进制数组,再对该二进制数组做 Base64 编码得到最终的 Password 签名字符串。

签名校验资料网址如下:https://help.aliyun.com/document_detail/48271.html

阿里云MQTT服务管理页面中,提供了一个在线的JS版本的签名校验验证计算页面,用于验证各位自行实现的校验算法是否正确。

MQTT连接测试

让我们调出Paho神器,来一场说连就连的测试

https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.ui.app/1.0.2/

https://www.eclipse.org/paho/downloads.php

如上图,先创建MQTT连接,填入服务器地址及端口,填入客户机标识(ClientId)

在MQTT连接选项中,勾选开启登录,填写用户名、密码

点击连接,正常情况下,即可成功连接并登录到阿里云MQTT服务器。

笔者基于C#,使用开源MQTTnet的Nuget包,也实现了一个简单的MQTT客户端。我们用这个客户端进行连接测试,效果如下图。

消息消费

MQTT是基于二进制消息的发布/订阅编程模式的消息协议。

要使用MQTT进行通讯,就需要有发布者和消费者。发布者通过发布主题消息传递信息,接收者通过订阅对应的主题接收和消费信息。

订阅主题

MQTT客户端与MQTT服务器建立连接之后,我们即可以进行消息订阅和消息发布。

发布主题

我们使用上文中建立的顶级主题创建一个带有通配符的订阅主题。

      注意,MQTT允许使用通配符订阅主题,但是并不允许使用通配符广播。

我们创建一个顶级主题下带有城市和发布者编号的主题,发布一条消息,Payload中携带一个json格式的状态信息和坐标信息。

点击发布,可以看到上图中,接收框中,成功接收到订阅主题下的消息。(操作中发布了二条消息)。

使用Paho测试消息发布/订阅,效果相同。

一个发布者发布的消息,可以被多个订阅者接收。

玩转MQTT-阿里云之MQTT使用(下)的更多相关文章

  1. 玩转MQTT-阿里云之MQTT使用

    引言 前两年买一款物联网控制板,当时把玩了一阵之后,验证了下串口通讯.MODBUS协议实现.TCP/UDP/DNS/MQTT通讯(基于GPRS)后,就放到角落里吃灰了呵. 最近收到阿里云的优惠推送,说 ...

  2. 基于阿里云的MQTT远程控制

    好久没有写博客了,眼看自己的项目就要快做完了,先分享一下基于MQTT的远程控制,自己买了一个阿里的云端,然后在云端上安装了一个MQTT服务器,其实是一不小心买了两个,所以准备贡献出来一个供大家使用, ...

  3. (二)基于阿里云的MQTT远程控制(购买阿里云,在云端安装MQTT,测试MQTT远程通信)

    QQ名称为Friday~的网友把他自己买MQTT的过程截图发给了我,今天就说一下如何购买阿里云,安装MQTT可以参考 http://www.cnblogs.com/yangfengwu/p/77646 ...

  4. 阿里云OneinStack,Linux下tomcat命令

    阿里云OneinStack,Linux下tomcat命令 Linux下如何查看tomcat是否启动在Linux系统下,重启Tomcat使用命令操作的首先,进入Tomcat下的bin目录cd /usr/ ...

  5. 阿里云上,Ubuntu下配置Nginx,在tomcat中加了https协议就不可以了

    问题 阿里云上,Ubuntu服务器,本来部署的是tomcat,并且使用了https 协议.后来为了静态资源分离集成了 nginx,nginx代理跳转到 tomcat.刚开始直接访问http 网址发现, ...

  6. 关于阿里云centos 2.6下手机表情输入后无法保存到mysql数据库的问题调研及mysql版本从5.1升级到5.7的全过程纪要

    近日在开发手机app的评论功能时,输入表情文字,保存后提示数据库保存失败.错误日志片段如下 caused by: java.sql.SQLException: Incorrect string val ...

  7. 阿里云服务器centos7环境下安装xampp后,mysql有进程,但是却没有监听3306端口

    配置阿里云服务器centos7中xampp环境时出现了一种情况: 在centos中可以使用命令进入mysql 修改后也可以远程用phpmyadmin连接mysql 但是用navicat却无法连接 先修 ...

  8. (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)

    如果不了解MQTT的可以看这篇文章  http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengw ...

  9. 阿里云服务器linux(cenos)下 jdk、tomcat的安装配置

    一.JDK的安装与环境配置 1. 下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...

随机推荐

  1. python print函数

  2. java 根据秘钥,对数据进行加解密

    package test; import com.alibaba.fastjson.JSONObject; import sun.misc.BASE64Decoder; import sun.misc ...

  3. 原生JS使用Blob导出csv文件

    最近在做关于文件下载的需求:前端调用接口,然后对返回数据进行过滤.格式化,然后按表格内容拼接生成csv文件,让用户下载. 具体实现方式如下:let sourceData = { head: [ '时间 ...

  4. [***]HZOJ 优美序列

    又是一道神仙题.考试的时候居然打了一个回滚莫队,不知道我咋想的…… 先说一个某OJT80,洛谷T5分的思路(差距有点大): 可以把位置和编号映射一下,区间内最大值和最小值对应的位置,每次更新,直到找到 ...

  5. top 9 Cloud Computing Failures

    top 9 Cloud Computing Failures Outages, hacks, bad weather, human error and other factors have led t ...

  6. OpenStack组件系列☞glance简介

    Glance项目提供虚拟机镜像的发现,注册,取得服务. Glance提供restful API可以查询虚拟机镜像的metadata,并且可以获得镜像. 通过Glance,虚拟机镜像可以被存储到多种存储 ...

  7. 读取hive的表结构,生成带comment的视图建表语句

    ### 读取hive的表结构,生成带comment的视图建表语句 # 读取配置文件中的表并进行遍历 grep -v '^#' tablesFile|while read tableName do st ...

  8. [C#] ServiceStack.Redis如何批量的pop数据?

    要安全的批量pop数据,有两个办法: 1.用事务(不用事务的话可能导致重复读.ServiceStack的pipeline是没有自带事务的.) 2.执行lua脚本 我这里提供用事务的实现方法: publ ...

  9. C#循环语句练习(二)

    1.求1!+2!+...+n! 所有阶乘的和 2.求100以内的质数 (1)第一种做法 (2)另一种做法 3. 总数=幼兔+小兔+成兔成兔=上个月的小兔+上个月的成兔小兔=上个月的幼兔幼兔=这个月的成 ...

  10. php Restful设计

    1.restful是基于资源的,面向资源架构风格(一个链接,一张图.一个文本等等) 2.restful的http协议 2.1 url: 2.1.1 port 服务端口,默认为80 2.1.2 path ...