vernemq 是基于erlang的MQTT 服务器(broker)
与emqx的对比
之前尝试使用过国人开发的emqx,emqx做得很强大,功能丰富。但是由于免费版的离线消息无法持久化,所以选择了vernemq。
emqx对于消息持久化在 架构设计中有解析。 emqx的文档很丰富,无论是否使用都推荐看一遍。
vernemq的文档相比就显得过于简单,但是简单又简单的好处,它会营造出一种使用简单的感觉。
不过如果真的要用起来, 还是要自己google一些东西,特别是第一次接触MQTT的用户。
关于持久化的简单解析, 就是消息会保存到磁盘中,如果没有持久化, 重启程序将会失去消息记录。 很明显自带持久化的vernemq初始使用会省心很多。
权限配置
查看官方安装教程。
权限配置是broker的一个关键,不同业务场景需要使用自己的配置方式,甚至安装数据库插件来通过表数据读取验证。
以下是我独立运营的一款产品的实际配置方案, 提供大家参考。
场景介绍
- 每个设备有一个uuid, 任何人可以订阅该uuid的消息。
- 只有通过服务器接口才能发布消息
这个场景是一个典型的单向数据流, 由于设备频道是开放订阅的, 但是发送数据到频道却需要经过业务服务器。
开启游客模式
/etc/vernemq/vernemq.conf
allow_anonymous = on
/etc/vernemq/vmq.acl
# ACL for anonymous clients
topic read public/+/print
user pisahub
topic write public/+/print
注意vmq.acl文件中, 第一行是游客权限,表示可以订阅 public/***/print 频道。
user pisahub 表示接下来的是用户pisahub的权限, 就是发布消息到 public/***/print 频道。
客户端订阅消息
要实现消息下发后, 小票机无论开不开机, 都能在重新联网是补打所有小票。 需要
- qos 1 或 2
- 固定 clientId
- cleanSession false
这是利用mqtt协议实现消息下发,补发需要做的。
至于代码实现根据每个语言不通的客户端自行实现。
服务器端开放接口,发布消息
更多实现请参考 披萨盒子 里面的文档说明。
披萨盒子是一个开源的开放云打印服务。 帮助零售系统实现云打印, 适合基于小程序等创新模式的零售系统。
网友评论