目录
一、MQTT简介 二、特性 三、实现方式 四、MQTT的搭建(ubuntu) 五、MQTT权限配置 六、MQTT实现(Java语言)
正文
物联网是新一代信息技术的重要组成部分,也是信息化时代的重要发展阶段。其英文名称为:其英文名称为:Internet of things(IoT)”。顾名思义,物联网是物联网。这有两个含义:一是物联网的核心和基础仍然是互联网,是基于互联网的扩展和扩展网络;二是用户端扩展到任何项目之间,进行信息交换和通信,即项目。物联网通过智能感知、识别技术和通用计算等通信感知技术广泛应用于网络集成,因此被称为继计算机和互联网之后世界信息产业发展的第三波浪潮。
在物联网的应用中,信息传输,MQTT是合适的协议工具。
回到顶部 MQTT(Message Queuing Telemetry Transport,基于发布/订阅的消息队列遥测传输协议)(publish/subscribe)该协议构建在模型的轻量级协议中TCP/IP协议之上,MQTT最大的优点是代码少,带宽有限,为连接远程设备提供实时可靠的信息服务。它作为一种低成本、低带宽占用的即时通信协议,广泛应用于物联网、小型设备和移动应用。
MQTT基于客户端-服务器的消息发布/订阅传输协议。MQTT协议重量轻、简单、开放、易于实现,使其应用广泛。在许多情况下,包括有限的环境,如机器和机器(M2M)通信和物联网(IoT)。广泛应用于卫星链路通信传感器、偶尔拨号的医疗设备、智能家居和一些小型化设备。
回到顶部
MQTT协议设计为远程传感器和控制设备通信,具有以下主要特点:
(1)利用发布/订阅消息模式提供一对多的消息发布,解除应用程序耦合。
(2)屏蔽负载内容的消息传输。
(3)使用TCP/IP提供网络连接。
主流的MQTT是基于TCP数据推送连接,但也是基于UDP版本叫MQTT-SN。由于这两个版本的连接方式不同,优缺点自然也不同。
(4)发布服务质量有三种新闻:
最多一次的消息发布完全依赖于底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP如果您的智能设备在新闻推送过程中没有联网,则推送过去没有收到,则无法再次联网。
至少一次确保信息到达,但可能会重复。
只有一次,以确保信息达到一次。这种级别可用于一些严格的计费系统。在计费系统中,重复或丢失消息会导致错误的结果。这种最高质量的新闻发布服务也可用于即时通讯APP推送,确保用户只收到一次。
(5)小传输,费用小(固定长度的头部为2字节),协议交换最小化,减少网络流量。
这就是为什么在介绍中说它非常适合在物联网领域,传感器和服务器的通信和信息收集。我们应该知道,嵌入式设备的计算能力和带宽相对较弱,这是非常适合使用该协议传输信息的。
回到顶部 实现MQTT在通信过程中,需要完成客户端和服务器端的通信,MQTT协议中有三种身份:出版商:(Publish)、代理(Broker)(服务器),订阅者(Subscribe)。其中,新闻发布者和订阅者都是客户端,新闻代理是服务器,新闻发布者可以同时是订阅者。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1)Topic,可以理解为新闻类型,订阅者订阅(Subscribe)之后,您将收到主题的消息内容(payload);
(2)payload,可以理解为新闻的内容是指订阅者想要使用的内容。 安装必要的软件
yum install gcc-c cmake openssl-devel -y
2、下载mosquitto 我下载的是1.6.8.因为我尝试了最新版本的1.6.9.它的包里丢个头文件,莫名其妙,然后掉了一个版本 官方地址:https://mosquitto.org下载地址:https://mosquitto.org/files/source/ 我们使用wget命令下载新包,或直接下载并输入服务器。我直接安装//root下面,如果需要修改路径。
wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz
3、解压 编译 安装
echo "解压" tar -zxvf mosquitto-1.6.8.tar.gz echo "进入mosquitto-1.6.8" cd mosquitto-1.6.8 echo "编译" make echo "安装" sudo make install
之后就找不到了libmosquitto.so.1.修改链接路径,重新加载动态链接库
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1 sudo ldconfig
创建配置文件 原始example删除此配置文件有很多内容,如端口默认 1883、密码文件位置、监控端口数量、绑定网卡、日志记录等需要自行研究。
mv /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
5.创建用户组和用户组
sudo groupadd mosquitto sudo useradd -g mosquitto mosquitto -s /sbin/nologin
没有创建执行程序,没有反应,因为默认使用配置文件user mosquitto。 如果您不想创建此用户,可以修改配置文件/etc/mosquitto/mosquitto.conf
# When run as root, drop privileges to this user and its primary # group. # Set to root to stay as root, but this is not recommended. # If run as a non-root user, this setting has no effect. # Note tat on Windows this has no effect and so mosquitto should
# be started by the user you wish it to run as.
#user mosquitto
user root
6、启动、查看、关闭程序 默认是后台运行,可以ps看下进程,kill关闭
echo "运行程序"
mosquitto -c /etc/mosquitto/mosquitto.conf -d
echo "ps查看"
ps -aux | grep mosquitto
echo "关闭程序"
kill -9 $(pidof mosquitto)
7、本地简单测试
mosquitto_pub 命令参数说明
-d 打印debug信息
-f 将指定文件的内容作为发送消息的内容
-h 指定要连接的域名 默认为localhost
-i 指定要给哪个clientId的用户发送消息
-I 指定给哪个clientId前缀的用户发送消息
-m 消息内容
-n 发送一个空(null)消息
-p 连接端口号
-q 指定QoS的值(0,1,2)
-t 指定topic
-u 指定broker访问用户
-P 指定broker访问密码
-V 指定MQTT协议版本
--will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
--will-qos Will的QoS值。该参数需要与--will-topic一起使用
--will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
--will-topic 用户发送Will消息的topic
mosquitto_sub 命令参数说明
-c 设定‘clean session’为无效状态,这样一直保持订阅状态,即便是已经失去连接,如果再次连接仍旧能够接收的断开期间发送的消息。
-d 打印debug信息
-h 指定要连接的域名 默认为localhost
-i 指定clientId
-I 指定clientId前缀
-k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒。
-q 指定希望接收到QoS为什么的消息 默认QoS为0
-R 不显示陈旧的消息
-t 订阅topic
-v 打印消息
--will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
--will-qos Will的QoS值。该参数需要与--will-topic一起使用
--will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
--will-topic 用户发送Will消息的topic
打开一个订阅者
mosquitto_sub -t topic
打开一个发布者
mosquitto_pub -t topic -m "发布内容"
相同topic的双方,发布者pub发送 “发布内容”给订阅者sub
8、修改默认配置 1.关闭匿名用户登录 打开mosquitto.conf文件( /etc/mosquitto/mosquitto.conf ),找到allow_anonymous节点,这个节点作用是,是否开启匿名用户登录。去掉前面的#,改为false。在651行左右 2.设置用户密码文件路径 找到password_file节点,这个节点是告诉服务器你要配置的用户将存放在哪里。打开此配置并指定pwfile.example文件路径(注意是绝对路径),在669行左右。 password_file /etc/mosquitto/pwfile.example 3.创建自定义用户 终端输入,最后面的是用户名
mosquitto_passwd -c /etc/mosquitto/pwfile.example username
之后自动弹出密码和确认密码,输入即可。(注意第二次创建用户时不用加 -c 如果加 -c 会把第一次创建的用户覆盖。)
用户信息存储于 /etc/mosquitto/pwfile.example,对密码进行了加密
4、重启mosquitto生效
echo "关闭程序"
kill -9 $(pidof mosquitto)
echo "运行程序"
mosquitto -c /etc/mosquitto/mosquitto.conf -d