玩转MQTT-阿里云之MQTT使用(下)
玩转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://www.eclipse.org/paho/downloads.php
如上图,先创建MQTT连接,填入服务器地址及端口,填入客户机标识(ClientId)
在MQTT连接选项中,勾选开启登录,填写用户名、密码
点击连接,正常情况下,即可成功连接并登录到阿里云MQTT服务器。
笔者基于C#,使用开源MQTTnet的Nuget包,也实现了一个简单的MQTT客户端。我们用这个客户端进行连接测试,效果如下图。
消息消费
MQTT是基于二进制消息的发布/订阅编程模式的消息协议。
要使用MQTT进行通讯,就需要有发布者和消费者。发布者通过发布主题消息传递信息,接收者通过订阅对应的主题接收和消费信息。
订阅主题
MQTT客户端与MQTT服务器建立连接之后,我们即可以进行消息订阅和消息发布。
发布主题
我们使用上文中建立的顶级主题创建一个带有通配符的订阅主题。
注意,MQTT允许使用通配符订阅主题,但是并不允许使用通配符广播。
我们创建一个顶级主题下带有城市和发布者编号的主题,发布一条消息,Payload中携带一个json格式的状态信息和坐标信息。
点击发布,可以看到上图中,接收框中,成功接收到订阅主题下的消息。(操作中发布了二条消息)。
使用Paho测试消息发布/订阅,效果相同。
一个发布者发布的消息,可以被多个订阅者接收。
玩转MQTT-阿里云之MQTT使用(下)的更多相关文章
- 玩转MQTT-阿里云之MQTT使用
引言 前两年买一款物联网控制板,当时把玩了一阵之后,验证了下串口通讯.MODBUS协议实现.TCP/UDP/DNS/MQTT通讯(基于GPRS)后,就放到角落里吃灰了呵. 最近收到阿里云的优惠推送,说 ...
- 基于阿里云的MQTT远程控制
好久没有写博客了,眼看自己的项目就要快做完了,先分享一下基于MQTT的远程控制,自己买了一个阿里的云端,然后在云端上安装了一个MQTT服务器,其实是一不小心买了两个,所以准备贡献出来一个供大家使用, ...
- (二)基于阿里云的MQTT远程控制(购买阿里云,在云端安装MQTT,测试MQTT远程通信)
QQ名称为Friday~的网友把他自己买MQTT的过程截图发给了我,今天就说一下如何购买阿里云,安装MQTT可以参考 http://www.cnblogs.com/yangfengwu/p/77646 ...
- 阿里云OneinStack,Linux下tomcat命令
阿里云OneinStack,Linux下tomcat命令 Linux下如何查看tomcat是否启动在Linux系统下,重启Tomcat使用命令操作的首先,进入Tomcat下的bin目录cd /usr/ ...
- 阿里云上,Ubuntu下配置Nginx,在tomcat中加了https协议就不可以了
问题 阿里云上,Ubuntu服务器,本来部署的是tomcat,并且使用了https 协议.后来为了静态资源分离集成了 nginx,nginx代理跳转到 tomcat.刚开始直接访问http 网址发现, ...
- 关于阿里云centos 2.6下手机表情输入后无法保存到mysql数据库的问题调研及mysql版本从5.1升级到5.7的全过程纪要
近日在开发手机app的评论功能时,输入表情文字,保存后提示数据库保存失败.错误日志片段如下 caused by: java.sql.SQLException: Incorrect string val ...
- 阿里云服务器centos7环境下安装xampp后,mysql有进程,但是却没有监听3306端口
配置阿里云服务器centos7中xampp环境时出现了一种情况: 在centos中可以使用命令进入mysql 修改后也可以远程用phpmyadmin连接mysql 但是用navicat却无法连接 先修 ...
- (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)
如果不了解MQTT的可以看这篇文章 http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengw ...
- 阿里云服务器linux(cenos)下 jdk、tomcat的安装配置
一.JDK的安装与环境配置 1. 下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...
随机推荐
- java 简单实现FtpClient
1. 引入喜闻乐见的maven地址 <dependency> <groupId>commons-net</groupId> <artifactId>co ...
- 洛谷P2947 [USACO09MAR]向右看齐Look Up
#include<cstdio> #include<algorithm> #include<stack> #include<cctype> using ...
- 项目中容易出现的BUG预警
之前没有记录BUG的习惯导致在同一个坑里边栽了好几次,于是将最近几个项目中遇到的问题整理一下,在进行新项目时预警一遍: 使用携带有搜索功能的分页查询时,注意当用户更改了查询条件但没有点击查询按钮直接点 ...
- python基础之逻辑题(3)
Python基础之逻辑题(3) 1.编写一个函数实现将IP地址转换成一个整数 2.求结果:---lambda 3.求a的结果 4.求下面nums的输出 5.求下面片段的输出 6.写出程序的结果:--- ...
- iptables 通讯端口转接(Port Forwarding)
是一种特殊的DNAT操作,其作用是让一部电脑(通常是防火牆)担任其它电脑的代理伺服器(proxy).防火牆接收外界网络接传给它自己的包,然后改写包的目的地位址或目的端口,使其像是要送到內部网路其它电脑 ...
- oracle函数 ABS(x)
[功能]返回x的绝对值 [参数]x,数字型表达式 [返回]数字 [示例] select abs(100),abs(-100) from dual; sign(x) [功能]返回x的正负值 [参数]x, ...
- oracle避免改变索引列的类型
当比较不同数据类型的数据时, ORACLE自动对列进行简单的类型转换. 假设 EMPNO是一个数值类型的索引列. SELECT … FROM EMP WHERE EMPNO = ‘123’ 实际上,经 ...
- 上传图片保存到MySql数据库并显示--经验证有效
以下方法仅供参考,只是介绍下这一种方法而已.欢迎指正!! 前台(image.html): 1<html> 2<head> 3<title>上传图片</tit ...
- oracle merge into 新增或者修改
merge into sn_balance b1 using(select 'admin' as userid,1 as type1 from dual) b2 on(b1.userid=b2.use ...
- idea各种中文显示乱码解决大全
本文链接:https://blog.csdn.net/liqimo1799/article/details/81811153中文乱码问题分类: 编码普通中文乱码properties文件中文乱码cons ...