centos7 上搭建MQTT服务器,修改密码,设置权限并进行测试。

①.完成MQTT服务器的搭建

②.集成MQTT到springboot后台

③.使MQTT支持WebSocket以便前端与springboot进行消息收发。

④.集成MQTT到工控机中

 

1.安装

mosquitto已经被加入到EPEL仓库中,添加EPEL源后可以直接通过yum安装。

sudo yum -y install epel-release
sudo yum install mosquitto

 

2.启停控制

 控制mosquitto这个service即可。

#启动
sudo systemctl start mosquitto
#停止
sudo systemctl stop mosquitto
#重启
sudo systemctl restart mosquitto
#开机自启
sudo systemctl stop mosquitto



3. 提升安全等级


默认配置文件的位置是:/etc/mosquitto/mosquitto.conf。

 

(1)关闭allow_anonymous

    在配置文件中去掉allow_anonymous参数前的注释符#,并将选项修改为false。

allow_anonymous false

(2)开启mqtt的websocket服务

   开启后,前端或H5端可直接通过mqtt服务器与客户端及时消息通讯(如微信公众号 ——共享单车开锁)

   安装的是eclipse 的镜像docker版本的可直接在mosquitto.conf添加下面的命令即可使mqtt服务器支持websocket

port 1883
listener 9001
protocol websockets

(3)设置密码 

mqttroot 为用户名,输入此命令后会要求连续输入两次密码
注:第一次添加用户需用mosquitto_passwd -c,第二次则不用-c,否则会覆盖第一个用户

#mosquitto_passwd -c /etc/mosquitto/pwfile.example mqttroot

 重启mosquitto后配置生效,同时pwfile.example文件中的密码转为密文存储。

 

 

(4)用户权限控制
   修改用户权限 :vim /etc/mosquitto/aclfile.example
   aclfile.example文件示例如下: 

# 这会影响没有用户名的用户访问限制,让无用户名的客户端可以拥有订阅和发布权限
#topic read $SYS/#
#topic write $SYS/#


# 该topic只开放给“mqttroot”使用
#user mqttroot
#topic foo/bar

# This affects all clients.
#pattern write $SYS/broker/connection/%c/state

#遗嘱主题(客户端在connect的option属性中添加遗嘱message,这样当客户端异常断开时mqtt服务器会给
#订阅此topic的所有客户端发送遗嘱message),遗嘱主题在服务端检测客户端在线离线的时候用到。
#注:正常diconnect时,mqtt服务器是不会向订阅此主题的客户端推送message的。
user mqttroot
topic status/online

# 后台主题(工控机订阅)
user mqttroot
topic production/device/ipc/send/#(#通配符后面加设备号可实现一对一通讯,不加可实现一对多通讯)

# 工控机主题(后台订阅)
user mqttroot
topic production/device/ipc/rec/#(后台订阅所有工控机发回来的消息)

 

(3)测试效果(分别开三个xshell窗口,模拟MQTT服务器,发送者,订阅者)

  给foo/bar推送消息(发送者)

订阅foo/bar的消息(订阅者)

 

②给springboot集成MQTT

未完待续。。。(已完成)

③.使MQTT支持WebSocket以便前端与springboot进行消息收发。

1.前端可mqtt的websocket直接与工控机通讯,这样消息不经过后台。

2.前端可使用原始的websocket与后台通讯,后台再通过mqtt与工控机通讯,通讯结果在返回给前端。

(已完成)

④.集成MQTT到工控机中

(已完成)

⑤工控机发布遗嘱主题,后台实时检测工控机在线离线。效果如下:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
设备端与阿里云IoT平台建立MQTT通道的CONNECT报文有三个关键参数:客户端标识符 (ClientId) ,用户名(User Name),密码(Password)。这三个参数由设备三元组(productKey,deviceName,deviceSecret)按照阿里云IoT签名规则生成。 参数 生成方式 描述 username deviceName+"&"+productKey password sign_hmac(deviceSecret,content) sign_hmac为mqttClientId中的signmethod content为 "clientId${id}deviceName${deviceName}productKey${productKey}timestamp${timestamp}" 其中 id:表示客户端ID,64字符内。 timestamp:表示当前时间毫秒值。 clientId id+"|securemode=3,signmethod=hmacsha1,timestamp="+timestamp+"|" id:表示客户端ID,64字符内。 timestamp:表示当前时间毫秒值。 securemode:表示安全模式:可选值有2(TLS加密)和3(非加密) signmethod:表示签名算法类型。支持hmacmd5,hmacsha1和hmacsha256 2. 三元组接入示例 2.1 设备三元组信息 设备三元组 productKey = a14Xib5kdYd deviceName = light1983432 deviceSecret = oLyaKqVxtRvjH284LdhqVgVUx1UPy6zq 建立MQTT连接时参数 clientId = SN1928339 timestamp = 1539421321846 signmethod = hmacsha1 2.2 参数生成结果 mqttClientId = SN1928339|securemode=3,signmethod=hmacsha1,timestamp=1539421321846| mqttUsername = light1983432&a14Xib5kdYd mqttPassword = b2488041f64f425016b467ee1c94959ebd592ad1 生成password的content content=clientIdSN1928339deviceNamelight1983432productKeya14Xib5kdYdtimestamp1539421321846 2.3 建立连接 mqttClientId作为MQTT客户端标识符 (ClientId) mqttUsername作为MQTT用户名(User Name) mqttPassword作为MQTT密码(Password) 在线Password生成算法验证

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值