【软件安装】核桃派安装mqtt服务器mosquitto

关于mqtt

mqtt是一个物联网常用的通讯协议,他的核心玩法跟http的不同,mqtt称为订阅与发布:

  • 订阅:客户端向服务器端登记要订阅某主题,后续有以该主题发布的消息时,服务器端就会主动转发给该客户端

  • 发布:客户端向服务器端发送一条消息,并说明要发布的主题,服务器就会将该消息转发给所有订阅了该主题的客户端

这里我们要安装配置一款mqtt服务器端软件mosquitto,他由eclipse推出,开源

安装

  1. 使用apt直接安装

sudo apt install mosquitto

  1. 启用mosquitto,然后他会开机自启

sudo service mosquitto start

命令行收发测试

  1. 安装一个命令行版的mqtt客户端

sudo apt install mosquitto-clients

  1. 运行以下命令,订阅主题,有新信息就输出
  • -v 有信息就打印

  • -h 127.0.0.1 指定mqtt服务器的ip地址

  • -t "a/#" 订阅主题 a/#


mosquitto_sub -v -h 127.0.0.1 -t "a/#"

  1. 再打开一个新的命令行终端,运行以下命令发布一条信息
  • -h 127.0.0.1 指定mqtt服务器的ip地址

  • -t "a/#" 发布的主题 a/#

  • -m "内容" 发布的内容


mosquitto_pub -h 127.0.0.1 -t "a/111" -m "内容"

测试结果如下:

配置mosquitto

1 基础配置文件

/etc/mosquitto/conf.d/路径下创建一个文件,比如my.conf


sudo vim /etc/mosquitto/conf.d/my.conf

在文件内存放如下内容


#修改端口

port 1800

# 不允许匿名访问,需要提供 用户名&密码 才能连接服务器

allow_anonymous false

# 指定要使用的 用户名&密码 文件,需手动创建该文件

password_file /etc/mosquitto/pwfile

# 指定权限控制文件存放路径,需手动创建该文件

acl_file /etc/mosquitto/aclfile

2 创建mqtt用户

客户端连接服务器时需要使用 用户名&密码,不是使用你linux系统的账户。

  1. 创建用于存放密码的文件,这个路径是刚刚的my.conf指定的

sudo touch /etc/mosquitto/pwfile

  1. 使用mosquitto_passwd命令来创建账号。以下命令的功能是创建aaa这个用户,输入命令后会要求你输入密码。

sudo mosquitto_passwd /etc/mosquitto/pwfile aaa

3 设置各用户的权限

使用vim创建并打开这个文件,这个路径是刚刚的my.conf指定的


sudo vim /etc/mosquitto/aclfile

权限文件示例如下,a/#代表以a/开头的所有主题,如a/test,a/b/c/d


#用户 aaa

#可以订阅与发布 a/#

#只能订阅 b/#

#只能发布 n/#

user aaa

topic a/#

topic read b/#

topic write c/#

#用户bbb只能发布 b/#

user bbb

topic write b/#

#所有用户都可以发布hhh/#

pattern write hhh/#

4 重启服务使配置生效


sudo service mosquitto restart

命令行收发mqtt测试

因为我们修改了端口,创建了用户,所以这次的命令长了一点

  1. 运行以下命令,订阅主题,有新信息就输出
  • -v 有信息就打印

  • -h 127.0.0.1 指定mqtt服务器的ip地址

  • -p 1800 指定端口

  • -u aaa 登陆用户

  • -P 123 登陆密码

  • -t "a/#" 订阅主题 a/#


mosquitto_sub -v -h 127.0.0.1 -p 1800 -u aaa -P 123 -t "a/#"

  1. 再打开一个新的命令行终端,运行以下命令发布一条信息
  • -h 127.0.0.1 指定mqtt服务器的ip地址

  • -p 1800 指定端口

  • -u aaa 登陆用户

  • -P 123 登陆密码

  • -t "a/#" 发布的主题 a/#

  • -m "内容" 发布的内容


mosquitto_pub -h 127.0.0.1 -p 1800 -u aaa -P 123 -t "a/111" -m "内容"

测试情况如下图:

6 个赞

先收藏,免得又去到处找资料了 :grin:

2 个赞