Skip to content

Commit

Permalink
docs: modify how-to-ensure-the-reliable-transmission-of-messages.md (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
cn-zane authored May 29, 2024
1 parent 01d4d3f commit ed8f9fc
Showing 1 changed file with 2 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 有没有问题,服务正不正常。

Expand Down

0 comments on commit ed8f9fc

Please sign in to comment.