共享订阅

在实践中我们的业务系统集成是集群存在,对于mqtt消息,如果没有做特殊处理,那么集群中每个服务只要订阅了mqtt中的一个主题,那么每台服务器都会进行消费。不仅浪费资源,还限制了服务的处理上限。

因此,有不少朋友在问这类问题:走MQTT协议,两个订阅者都订阅同一个topic,向该topic发布一个消息,怎么只让其中的订阅者消费?

针对这个问题,笔者经过实践发现,可以通过broker共享订阅机制来解决此问题。

什么是共享订阅

共享订阅是在多个订阅者之间实现负载均衡的订阅方式:

[subscriber1] got msg1

msg1, msg2, msg3 /

[publisher] ----------------> "$share/g/topic" -- [subscriber2] got msg2

\

[subscriber3] got msg3

上图中,共享 3 个 subscriber 用共享订阅的方式订阅了同一个主题 $share/g/topic,其中topic 是它们订阅的真实主题名,而 $share/g/ 是共享订阅前缀。EMQ X 支持两种格式的共享订阅前缀:

如何实现共享订阅

以emqx为例,可通过三方面来进行配置:

第一,配置emqx,开启共享订阅。

# etc/emqx.conf

# 均衡策略

broker.shared_subscription_strategy = random

# 适用于 QoS1 QoS2 消息,启用时在其中一个组离线时,将派发给另一个组

broker.shared_dispatch_ack_enabled = true

在emqx.conf配置文件中,通过shared_subscription_strategy指定共享订阅均衡策略。通过shared_dispatch_ack_enabled设置为true来开启共享订阅功能。

其中random表示在所有订阅者中随机选择,round_robin表示按照订阅顺序,sticky表示一直发往上次选取的订阅者,hash表示按照发布者 ClientID 的哈希值。

第二,消息发布。消息发布者与正常的消息发布一样,比如定义了这样一个topic路径。

iot/equipment/heart

第三,消息订阅

订阅的时候通过添加$queue前缀或$share前缀进行共享订阅。

$queue/iot/equipment/heart

// 或

$share/iot/equipment/heart

一定要注意,真是的topic是iot/equipment/heart,因此发布的时候只能用这个路径。而订阅时添加上$queue/或$share/前缀来表示是基于不带群组的共享定义还是待群组的共享订阅。

如果发布的主题直接添加上两个前缀的一个,则消息是无法正常发送的。

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

如何订阅MQTT服务器历史消息,mqtt集群订阅如何只消费一个(一次)消息?相关推荐

  1. 消息队列——RabbitMQ消息队列集群

    RabbitMQ消息队列集群 消息队列/中间件 RabbitMQ详解 RabbitMQ单机部署 RabbitMQ集群部署 消息队列/中间件 一.前言 在我们秒杀抢购商品的时候,系统会提醒我们稍等排队中 ...

  2. SmartRoute之大规模消息转发集群实现

    为什么80%的码农都做不了架构师?>>>    消息转发的应用场景在现实中的应用非常普遍,我们常用的IM工具也是其中之一:现有很多云平台也提供了这种基础服务,可以让APP更容易集成相 ...

  3. 利用集群技术实现Web服务器的负载均衡 集群和负载均衡的概念

    集群和负载均衡的概念 集群(Cluster) 所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算 ...

  4. 服务器查看不到集群信息,集群服务器查看内存

    集群服务器查看内存 内容精选 换一换 用户可以查看在不同云服务区已经申请成功的专属云.进入指定的专属云,还可以查看该专属云内专属计算资源详情及云服务器等专属云内基础服务的实例信息.登录管理控制台.单击 ...

  5. 怎么提高es服务器的性能,es集群服务器配置规则是怎样的?什么是es集群

    es集群服务器配置,可能大家都不是特别的了解,那么,es集群服务器配置规则是怎样的呢?es为什么要实现集群?这是大家都想知道的,接下来我们就跟着小编来看看这方面的内容吧. es集群服务器配置 es为什 ...

  6. 测试一个config server 服务器挂机后,集群是否能读写数据

    测试架构: 测试目的: 测试一个config server 服务器挂机后,集群是否能读写数据. 测试原因: 上周因为内存吃紧,准备添加内存.在查看服务器时,把一台服务器关机检查.     关机后,WE ...

  7. 阿里云服务器(ECS)集群解决方案

    阿里云服务器(ECS)集群解决方案 参考文章: (1)阿里云服务器(ECS)集群解决方案 (2)https://www.cnblogs.com/568yscom/p/10769175.html 备忘一 ...

  8. 微信公众号 多台服务器,在多台 Linux 服务器上搭建 Pulsar 集群

    作者:高天赐 编辑:Irene Pulsar 是一个支持多租户的.高性能的消息中间件.上一篇我们介绍了如何在 Mac 上搭建 Pulsar 集群,本文详细介绍如何在 3 台 Linux 服务器上搭建 ...

  9. 本地连接服务器搭建的 Redis 集群

    本地连接服务器搭建的 Redis 集群 在实际运行测试中,存在两个问题 安全组或防火墙开放端口 主要开放+10000端口. 如果要连接 Redis集群的应用服务不和 Redis集群在一个局域网下,会出 ...

  10. 服务器分布式部署和集群部署的区别

    服务器分布式部署和集群部署的区别 1.分布式部署 分布式是以缩短单个任务的执行时间来提升效率的:分布式是将不同的业务分布在不同的地方: 2.集群部署 集群是将几台服务器集中在一起,实现同一业务:集群是 ...

最新文章

  1. InnoDB行锁的实现分析
  2. linux shell写服务,Linux shell编写系统服务脚本
  3. Java 中Comparator 的使用,实现集合排序
  4. Labview 2017安装教程
  5. 最短Hamilton路径(状压dp)
  6. SAP Spartacus如何启用B2B feature
  7. virsh default启动失败原因分析及解决
  8. WIN7下VS2005 VS2008 SQLSERVER2005安装顺序
  9. 开源代码是下一轮攻击潮的重灾区
  10. dos盘启动计算机,u盘dos启动盘怎么制作 u盘dos启动盘制作步骤【详细介绍】
  11. 马哥 python培训
  12. R语言连续变量正态性检验
  13. GenericObjectPoolConfig属性
  14. Electron学习笔记(一) 配置, 创建, 设置, 监听
  15. 关于“嵌入式系统设计师”的了结。
  16. 领导喜欢员工的15种素质
  17. VMware View for iPad,上座率最高的iPad免费软件
  18. SIGIR2020推荐系统论文聚焦
  19. HuaWei(手机)瘦身
  20. 工欲善其事必先利其器——第四弹 业务线仿真回归流程剖析

热门文章

  1. ML之DL:机器学习领域发展最快的分支【深度学习】的发展史及其重要性节点之详细攻略
  2. ML之SSIM:基于输入图片RGB的三维向量利用SSIM(结构相似性度量)算法进行判别
  3. Dataset之谷歌地图数据集:谷歌地图数据集的简介、安装、使用方法之详细攻略
  4. Crawler/ML:爬虫技术(基于urllib.request库从网页获取图片)+HierarchicalClustering层次聚类算法,实现自动从网页获取图片然后根据图片色调自动分类
  5. 在Linux上如何安装Oracle数据库
  6. 浅析Java.lang.ProcessBuilder类
  7. java处理文件路径windows与linux兼容问题
  8. iOS开发 tabBarController选中状态
  9. Gradle 教程:第一部分,安装【翻译】
  10. 页面状态javascript 判断 iframe是否加载成功