使用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 的哈希值 |
如果想不通的群组都只能有一个订阅者接收到消息, 可以使用带群组的共享订阅 , 这样每个群组中都会有一个订阅者接收到消息