EMQ
01- EMQ是什么 ? 你们项目中哪里用到了EMQ?
EMQ X 是开源社区中最流行的 MQTT 消息服务器。
MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域。
- 物联网M2M通信,物联网大数据采集
- Android消息推送,WEB消息推送
- 移动即时消息,例如Facebook Messenger
- 智能硬件、智能家居、智能电器
- 车联网通信,电动车站桩采集
- 智慧城市、远程医疗、远程教育
- 电力、石油与能源等行业市场
所以EMQ的主要运用领域也就是物联网领域, 主要使用EMQ实现物联网设备之间的相互通信, 以及服务器和物联网设备之间的相互通信
EMQ X 是开源百万级分布式 MQTT 消息服务器(MQTT Messaging Broker),用于支持各种接入标准 MQTT 协议的设备,实现从设备端到服务器端的消息传递,以及从服务器端到设备端的设备控制消息转发。从而实现物联网设备的数据采集,和对设备的操作和控制
在我们的项目中主要使用EMQ实现了服务器和物联网设备之间的信息传输 , 而且使用EMQ作为消息队列产品实现了各个微服务之间的数据传输 , 例如 :
- 设置状态实时监控
- 自动维修工单创建和自动补货工单创建
- 订单创建以及支付结果确认
- 设备出货控制
- 设置出货结果通知处理等
- .....
02- 使用EMQ如何保证消息不丢失 ?
在MQTT 协议中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性 !
MQTT消息服务质量QoS等级有三个级别 :
- 0 : 消息最多传递一次, 可能会存在消息丢失
- 1 : 消息至少传递一次 , 不会出现消息丢失, 但是可能会出现消息重复
- 2 : 消息仅传递一次 , 不会出现消息丢失, 也不会出现消息重复
03- 使用EMQ如何保证消息不重复消费 ?
在MQTT 协议中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性 !
MQTT消息服务质量QoS等级有三个级别 :
- 0 : 消息最多传递一次, 可能会存在消息丢失
- 1 : 消息至少传递一次 , 不会出现消息丢失, 但是可能会出现消息重复
- 2 : 消息仅传递一次 , 不会出现消息丢失, 也不会出现消息重复
04- EMQ支不支持延迟消息, 如何实现 ?
EMQ X 的延迟发布功能可以实现按照用户配置的时间间隔延迟发布 PUBLISH 报文的功能。当客户端使用特殊主题前缀 $delayed/{DelayInteval} 发布消息到 EMQ X 时,将触发延迟发布功能。延迟发布的功能是针对消息发布者而言的,订阅方只需要按照正常的主题订阅即可
05- 使用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 的哈希值 |
如果想不通的群组都只能有一个订阅者接收到消息, 可以使用带群组的共享订阅 , 这样每个群组中都会有一个订阅者接收到消息