本文主要是介绍EMQ共享订阅,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 共享订阅
多个客户端订阅了同一个主题,发布者发布主题时,每个客户端都会同时收到这个主题的消息。在客户端集群部署的场景下会出现消息重复处理的问题。
EMQ支持共享订阅,多个客户端订阅了同一个主题,发布者发布主题时,只有其中一个客户端接收到消息。
共享订阅有两种方式:
(1)共享订阅:订阅前缀$queue/
多个客户端订阅了$queue/topic,发布者发布到topic,则只有一个客户端会接收到消息。
(2)分组订阅:订阅前缀$share/<group>/
多组客户端订阅了$queue/group1/topic、$queue/group2/topic...,发布者发布到topic,则消息会发布到每个group中,但是每个group中只有一个客户端会接收到消息。
2 Java客户端实现共享订阅
开发时发现,使用eclipse paho java客户端时,无法处理共享订阅。订阅$queue/topic能够订阅成功,并且跟踪代码能看到emq也把消息转发到了客户端,但是客户端丢弃掉了。
解决方法就是重写mqtt的回调函数,实现MqttCallback接口。
实现MqttCallback接口的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
|
创建emq连接代码如下:
1 2 3 4 5 6 7 |
|
还要再写一个实现IMqttMessageListener接口的Emq消息处理类:
1 2 3 4 5 6 7 8 9 10 11 12 |
参考链接: 1 emq的github上关于这个问题的讨论: |
这篇关于EMQ共享订阅的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!