物联网消息协议 Mosquitto 服务器在 CentOS 7 上的部署

一提到安装部署,大家都知道 yum install ,是的, 概不例外。安装这个服务程序也非常简单。

然后

# systemctl enable mosquitto

# systemctl start mosquitto

为了安全,我们需要采用认证机制。我们可以用

# mosquitto_passwd  -c mosquitto.pwd username1

来创建一个口令文件,并添加第一个用户 username1。

加密后口令和用户名就会存放到口令文件。 熟悉 Apache 的同学都会知道,这和 htpasswd 命令有点类似。

配置  /etc/mosquitto/mosquitto.conf 文件如下:

user mosquitto
bind_address 192.168.7.201
port 1883
log_dest file /var/log/mosquitto/mosquitto.log
log_type all
log_timestamp true
allow_anonymous false
password_file /etc/mosquitto/mosquitto.pwd
autosave_interval 1800
persistence true
persistence_file mosquitto.db
persistence_location /var/mosquitto/

确保 /var/mosquitto/ 和  /var/log/mosquitto/ 目录存在,并被 mosquitto 用户可写。

# systemctl restart mosquitto

# tail -f /var/log/mosquitto/mosquitto.log
可以查看 mosquitto 的日志。

如果没有日志,那么查看 /var/log/message ,看看服务是否正常启动。

为 Mosquitto 添加证书,这部分暂且略过。如果服务器部署在公网上的话,可以用 certbot 申请免费的证书,来加密消息的传送。

消息传送的测试:

发布:

# mosquitto_pub -u username -P password -p 1883 -h 192.168.7.201 -t test -m “hello 你好”

在打开的另外一个窗口用以下命令可以接收到发送的消息:

# mosquitto_sub -u username -P password -p 1883 -h 192.168.7.201 -t test

在日志里面,我们看到订阅者的连接信息:

New client connected from 192.168.7.201 as mosqsub|18652-cdh1 (c1, k60, u’username’).

18652是进程号

cdh1 是主机名

c1 是否清理 session

k60 是 KeepAlive 60s

u 后面是用户名

消息发布后,可以看到如下日志:

1501495574: Received PUBLISH from mosqpub|18653-cdh1 (d0, q0, r0, m0, ‘test’, … (12 bytes))

d0,关闭调试

q0, 默认 QOS = 0
r0, 消息是否 retain

m0, 是这个 test topic 下的第一条消息,后续消息以 m1,m2 递加。

关于具体的这些参数可以用 man  查看文档了解。

其他资源:
MQTT 各种语言上的实现
MQTT 官方标准文档

作者: 甬洁网络

--移动互联网&物联网技术提供商