手动Ack

来源:4-6 实现重回队列

绾绾爱吃肉

2021-08-12

在手动Ack模式下,如果不手动的进行签收,实际上也是能接收到消息的,那业务流程也是可以继续下去的,但实际上队列中还是有这么一条消息。

下次重启的时候,监听这个队列的服务又会收到这个消息,相同的业务会再走一次,比如订单状态的修改。第一次没有Ack,但是业务流程走完了,订单的状态改为结束。那第二次走的时候可能在中途发生故障,导致订单的状态不一致了,这种情况怎么办呢?只能在业务层面去防御吗?

比如说每次修改订单状态之前先判断一下是不是某种状态,是就修改,不是就额外处理?

写回答

1回答

Moody

2021-08-13

确实像你说的,有重复消费的隐患,根本方法还是要在接收消息的业务逻辑里做到可靠的Ack。

如果没有做到可靠的Ack,就要想办法对重复消息进行鉴别,比如像你说的判断订单状态

0
1
绾绾爱吃肉
非常感谢!
2021-08-13
共1条回复

RabbitMQ精讲,提升工程实践能力,培养架构思维

消息驱动架构+订单状态机,二次开发,手写分布式事务框架。

470 学习 · 205 问题

查看课程