1.ACL身份验证规则
在正常的业务使用下,客户端的行为可以受到ACL的限制。例如,客户端A只能订阅/A/get队列消息,并向/A/set发布内容,但是在MYSQL中需要写入两条记录来处理这种身份验证。如果有一百万个带设备的数据库,两百万个认证数据将极大地影响数据库的性能。那么有没有批量定义ACL认证的方法呢?
在mysql-ACL认证配置文件下,可以编辑关于如何使用认证的sql,这意味着可以通过SQL实现批量ACL认证规则
>。vim/usr/local/emqttd/etc/plugins/emq _ auth _ MySQL . conf
#底部有这样的配置
auth.mysql.acl_query =从mqtt_acl中选择allow、ipaddr、username、clientid、access、topic,其中IP addr =“% a”或username =“% u”或username = “$ all”或client id =“% c”
作者在这里实现了每台设备默认可以订阅/A/get队列消息和发布到/A/set
2.共享订阅
在队列的常用中也有这样的场景。一条消息预期会被多个侦听器接收。可能的情况如下:
一个程序处理,一个程序记录日志分别处理批量推送多个消息希望由多个程序之一处理。场景如下:
并发情况下耗时操作进行并行处理提高系统吞吐量默认情况下,多个客户端在收听一个事件时会收到相同的消息,但是如何共享订阅呢?EMQ共享订阅支持两种使用模式:
$queue/ 如:$queue/topic$share/<group>/ 如:$share/group/topic多个服务端监听 $share/group/topic客户端向 topic 发送消息3.3的区别。Qos 0/1/2 1/2是实际测量的
最多传输一次的消息是基于TCP/IP网络的。没有响应,协议中也没有定义重传的语义。消息可能会到达服务器一次,也可能根本不会到达。
4.破解密码
用户身份验证中可以使用哈希方法,如普通| md5 | sha | sha256 | bcrypt(默认情况下使用sha256)。但是,出于安全原因,EMQ也支持在密码中添加salt,因此您可以解锁注释并使用salt添加方法之一。
5.EMQ离线消息
保留消息 MQTT客户端向服务器发布(PUBLISH)消息时,可以设置保留消息(Retained Message)标志。保留消息(Retained Message)会驻留在消息服务器,后来的订阅者订阅主题时仍可以接收该消息。 例如mosquitto命令行发布一条保留消息到主题’a/b/c’: mosquitto_pub -r -q 1 -t a/b/c -m 'hello' 之后连接上来的MQTT客户端订阅主题’a/b/c’时候,仍可收到该消息: $ mosquitto_sub -t a/b/c -q 1 hello 保留消息(Retained Message)有两种清除方式: 客户端向有保留消息的主题发布一个空消息: mosquitto_pub -r -q 1 -t a/b/c -m '' 消息服务器设置保留消息的超期时间。 cleanSession 清理回话 MQTT客户端向服务器发起CONNECT请求时,可以通过’Clean Session’标志设置会话。 ‘Clean Session’设置为0,表示创建一个持久会话,在客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。 ‘Clean Session’设置为1,表示创建一个新的临时会话,在客户端断开时,会话自动销毁。6.摘要
EMQ和MQTT的使用还有很多细节需要注意,注意细节可以更进一步
注意:作者能力有限,希望大家指出错误的点,多交流!
EMQ官方地址:http://emqtt.com/
EMQ中文文献:http://emqtt.com/docs/v2/guide.html
1.《emq EMQ 百万级 MQTT 消息服务的一些小技巧》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《emq EMQ 百万级 MQTT 消息服务的一些小技巧》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/fangchan/740848.html