了解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 的哈希值

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

相关文章
|
算法 数据挖掘
群体遗传学研究荐读丨应知应会(下)
群体遗传学研究荐读丨应知应会(下)
|
10月前
|
消息中间件 架构师 Kafka
【架构师】如何做技术选型?
技术选型无绝对优劣,关键在于“更合适”。需综合评估功能满足度、可扩展性、安全性、性能等非功能性需求,同时考量使用人数、社区活跃度、迭代速度、学习与维护成本,以及与现有技术体系的匹配度,权衡利弊后做出最优选择。
434 4
|
人工智能 监控 大数据
大数据未来五大趋势,这些变化你真的准备好了吗?
大数据未来五大趋势,这些变化你真的准备好了吗?
1387 90
|
网络协议 搜索推荐 Linux
Minecraft配置文件参数说明(基岩版服务器篇)
server.properties 是 Minecraft Bedrock 服务器的核心配置文件,用于定义服务器的基本设置和运行规则。文件通常位于服务端根目录(Windows 示例路径:`C:\bedrock-server`;Linux 示例路径:`/opt/bedrock-server/` 或自定义路径)。根据需求调整参数,可实现个性化服务器配置。
1797 2
|
SQL Cloud Native 关系型数据库
【工具】竟比Navicat还好用,我咋这么不信呢
文章详细阐述了SQLynx的四大重点:1. 什么是SQLynx;2. 如何下载;3. 与Navicat相比的优势;4. 使用方法。SQLynx支持多种数据库和操作系统,具备云原生架构、自动化与智能化功能、团队协作支持等优点。通过实例演示了如何创建MySQL连接并导出表数据,展示了其高效、灵活的特点。希望读者能支持国产软件的发展。
2745 2
【工具】竟比Navicat还好用,我咋这么不信呢
|
资源调度 前端开发 JavaScript
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第10天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤,包括安装依赖、创建混淆脚本、修改 `package.json` 脚本命令、构建项目并执行混淆,以及在 HTML 文件中引用混淆后的文件。通过这些步骤,可以有效提高代码的安全性。
1957 2
|
XML Java Android开发
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
1486 1
|
前端开发 JavaScript 安全
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第7天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤。包括项目准备、安装 `javascript-obfuscator`、配置 Vite 构建以应用混淆,以及最终构建项目进行混淆。通过这些步骤,可以有效提升前端代码的安全性,防止被他人轻易分析和盗用。
3520 0
|
Kubernetes 监控 测试技术
在K8S中,如何实现上线发布流程(灰度发布)?
在K8S中,如何实现上线发布流程(灰度发布)?
微信小程序实现上传视频 / 上传图片功能以及整合上传视频 / 上传图片功能(超详细)
微信小程序实现上传视频 / 上传图片功能以及整合上传视频 / 上传图片功能(超详细)