了解EMQ

简介: EMQ通过MQTT协议的QoS机制保障消息可靠传输,支持QoS 0、1、2三个等级,分别实现消息最多一次、至少一次和恰好一次传递。对于延迟消息,EMQ X支持通过特殊主题前缀`$delayed/{DelayInterval}`实现延迟发布。点对点通信可通过不带群组的共享订阅(如`$queue/t/1`)实现,结合负载均衡策略如随机、轮询等,确保消息仅由一个订阅者接收;发布订阅模式则通过带群组的共享订阅(如`$share/组名称/t/1`)实现,确保每组一个订阅者收取消息。

使用EMQ如何保证消息不丢失 ?

在MQTT 协议中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性 !

MQTT消息服务质量QoS等级有三个级别 :

  • 0 : 消息最多传递一次, 可能会存在消息丢失
  • 1 : 消息至少传递一次 , 不会出现消息丢失, 但是可能会出现消息重复
  • 2 : 消息仅传递一次 , 不会出现消息丢失, 也不会出现消息重复

使用EMQ如何保证消息不重复消费 ?

在MQTT 协议中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性 !

MQTT消息服务质量QoS等级有三个级别 :

  • 0 : 消息最多传递一次, 可能会存在消息丢失
  • 1 : 消息至少传递一次 , 不会出现消息丢失, 但是可能会出现消息重复
  • 2 : 消息仅传递一次 , 不会出现消息丢失, 也不会出现消息重复

EMQ支不支持延迟消息, 如何实现 ?

EMQ X 的延迟发布功能可以实现按照用户配置的时间间隔延迟发布 PUBLISH 报文的功能。当客户端使用特殊主题前缀 $delayed/{DelayInteval} 发布消息到 EMQ X 时,将触发延迟发布功能。延迟发布的功能是针对消息发布者而言的,订阅方只需要按照正常的主题订阅即可

使用EMQ如何实现点对点消息和发布订阅消息 ?

默认情况下EMQ中的消息会发送给所有订阅了主题的订阅者 , 就是一种发布订阅机制

EMQ X 支持两种格式的共享订阅前缀:

模式

示例

前缀

真实主题名

不带群组共享订阅

$queue/t/1

$queue/

t/1

带群组共享订阅

$share/组名称/t/1

$share/abc

t/1

如果想实现点对点消息, 可以采用EMQ中的不带群组的共享订阅 , 这样消息就只会被订阅者列表中的某一个订阅者接收, 可以在配置文件中配置负载均衡的策略broker.shared_subscription_strategy = random

均衡策略

描述

random

在所有订阅者中随机选择

round_robin

按照订阅顺序轮询

sticky

一直发往上次选取的订阅者

hash

按照发布者 ClientID 的哈希值

如果想不通的群组都只能有一个订阅者接收到消息, 可以使用带群组的共享订阅 , 这样每个群组中都会有一个订阅者接收到消息

相关文章
|
4月前
|
负载均衡 Java Nacos
微服务架构中的服务注册与发现流程
本内容介绍了微服务架构中的服务注册与发现流程,包括服务注册中心(如Nacos)、服务提供者和调用者的角色分工。服务启动时自动注册信息至注册中心,调用者通过客户端负载均衡(如Spring Cloud Loadbalancer)选取服务实例进行远程调用。同时,内容还讲解了OpenFeign的工作原理,其作为HTTP客户端集成负载均衡,通过接口定义、代理生成、请求发送与结果解析,实现服务间的高效通信。
|
NoSQL 数据可视化 关系型数据库
推荐几个好用的redis可视化工具
推荐几个好用的redis可视化工具
17862 1
|
4月前
|
消息中间件 存储 缓存
再次了解kafka
Kafka通过offset机制解决消息重复消费问题,支持手动提交偏移量及唯一ID去重。它保证分区内的消息顺序消费,结合集群、副本与重平衡实现高可用。高性能设计包括顺序读写、分区、页缓存、零拷贝等。数据清理依赖保留时间或大小策略,点对点和发布订阅模式则通过消费者组实现。
|
4月前
|
消息中间件 NoSQL Java
延时实现
本节介绍了多种关闭过期订单的实现方案,包括定时任务、JDK延迟队列、Redis过期监听、Redisson延迟队列、RocketMQ延迟消息及RabbitMQ死信队列。各自优缺点明显,适用于不同业务场景,如定时任务适合小数据量,RocketMQ适合高并发解耦场景,而Redisson则使用简单且高效。选择时需综合考虑系统复杂度、数据量及可靠性要求。
|
4月前
|
存储 缓存 Linux
CPU上下文切换的原理及其在系统调用和进程切换中的应用
本内容深入解析了CPU上下文切换的原理及其在系统调用和进程切换中的应用。详细说明了CPU寄存器、程序计数器在任务切换中的作用,以及系统调用与进程上下文切换的区别。同时探讨了上下文切换带来的性能开销,涉及TLB和虚拟内存管理机制,帮助理解操作系统如何高效调度进程。
|
4月前
|
存储 算法 Sentinel
熔断降级
本内容介绍了微服务中熔断降级的实现原理及Sentinel的底层机制。通过OpenFeign集成Sentinel,利用断路器统计异常和慢请求比例,触发熔断并降级,提升系统稳定性。还讲解了Sentinel使用的限流算法,如滑动窗口、令牌桶和漏桶算法,以应对不同场景下的流量控制需求。
|
4月前
|
SQL 数据库 Docker
杂项4
本内容涵盖Java中Lambda表达式对变量的final要求、锁机制中的synchronized使用注意事项、分布式锁与悲观锁的应用场景对比,以及Docker镜像文件(.tar)的正确处理方式。重点解析了多线程与多实例环境下资源竞争的解决方案,并提供代码示例和决策依据,适用于并发编程与微服务架构开发。
|
4月前
|
负载均衡 Java 应用服务中间件
杂项10
Spring Cloud Alibaba 与 Spring Cloud 均基于 Spring Boot 构建微服务,遵循相同规范且组件可协同使用。区别在于,Spring Cloud Alibaba 使用 Nacos 实现服务发现与配置管理,推荐 Sentinel 作为断路器,并支持 Dubbo 与 Feign 远程调用。Nginx 可通过配置 upstream 实现负载均衡,作为反向代理,其“反向”体现在外网通过 Nginx 访问内部服务器。
|
4月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
4月前
|
SQL Java 数据库连接
了MyBatis的多个核心功能实现方式
本文介绍了MyBatis的多个核心功能实现方式,包括:如何获取生成的主键、实体类属性与表字段名不一致时的处理方法、多表查询的实现方式(使用`association`和`collection`标签)、延迟加载的支持情况、批量插入的实现方式及主键返回问题。内容实用,适合MyBatis开发者参考。