MQTT介绍与使用

目录

一、MQTT简介
二、特性
三、实现方式  
四、MQTT的搭建(ubuntu)
五、MQTT权限配置
六、MQTT实现(Java语言)

正文

物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。其英文名称是:“Internet of things(IoT)”。顾名思义,物联网就是物物相连的互联网。这有两层意思:其一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;其二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,也就是物物相息。物联网通过智能感知、识别技术与普适计算等通信感知技术,广泛应用于网络的融合中,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。

而在物联网的应用上,对于信息传输,MQTT是一种再合适不过的协议工具了。

回到顶部
一、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,可以理解为消息的内容,是指订阅者具体要使用的内容。
  
四、MQTT的搭建(ubuntu)
1、安装必备软件

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

4、创建配置文件
原始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 that 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
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ActiveMQ是一个流行的开源消息传递中间件,它支持多种通信协议,包括MQTT(Message Queuing Telemetry Transport)。MQTT是一个轻量级的消息传递协议,最初设计用于传输传感器和设备之间的消息。在ActiveMQ中,您可以通过配置Transport Connector来启用MQTT协议支持。您可以在ActiveMQ安装目录的conf/activemq.xml文件中的< transportConnectors >标签中找到配置Transport Connector的相关信息。。另外,《内嵌启动 ActiveMQ 服务》也提供了一些关于启动ActiveMQ并指定新的传输协议的信息,您可以参考该文档。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Day175.ActiveMQ的传输协议 -ActiveMQ](https://blog.csdn.net/qq_43284469/article/details/113196783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [ActiveMQ 传输协议与配置、同一服务器启动多个 Broker](https://blog.csdn.net/wangmx1993328/article/details/102369772)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值