docs: modify how-to-ensure-the-reliable-transmission-of-messages.md (#303)

This commit is contained in:
Zane 2024-05-29 12:34:10 +08:00 committed by GitHub
parent 01d4d3fcd9
commit ed8f9fc70c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -178,9 +178,9 @@ RabbitMQ 如果丢失了数据,主要是因为你消费的时候,**刚消费
#### 生产者发送消息时如何保证不丢失?
解决发送时消息丢失的问题可以采用 RocketMQ 自带的**事消息**机制
解决发送时消息丢失的问题可以采用 RocketMQ 自带的**事消息**机制
消息原理:首先生产者会发送一个**half 消息**(对原始消息的封装)该消息对消费者不可见MQ 通过 ACK 机制返回消息接受状态, 生产者执行本地事务并且返回给 MQ 一个状态(Commit、RollBack 等),如果是 Commit 的话 MQ 就会把消息给到下游, RollBack 的话就会丢弃该消息,状态如果为 UnKnow 的话会过一段时间回查本地事务状态,默认回查 15 次,一直是 UnKnow 状态的话就会丢弃此消息。
消息原理:首先生产者会发送一个**half 消息**(对原始消息的封装)该消息对消费者不可见MQ 通过 ACK 机制返回消息接受状态, 生产者执行本地事务并且返回给 MQ 一个状态(Commit、RollBack 等),如果是 Commit 的话 MQ 就会把消息给到下游, RollBack 的话就会丢弃该消息,状态如果为 UnKnow 的话会过一段时间回查本地事务状态,默认回查 15 次,一直是 UnKnow 状态的话就会丢弃此消息。
为什么先发一个 half 消息,作用就是先判断下 MQ 有没有问题,服务正不正常。