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

绾绾爱吃肉
2021-08-12
在手动Ack模式下,如果不手动的进行签收,实际上也是能接收到消息的,那业务流程也是可以继续下去的,但实际上队列中还是有这么一条消息。
下次重启的时候,监听这个队列的服务又会收到这个消息,相同的业务会再走一次,比如订单状态的修改。第一次没有Ack,但是业务流程走完了,订单的状态改为结束。那第二次走的时候可能在中途发生故障,导致订单的状态不一致了,这种情况怎么办呢?只能在业务层面去防御吗?
比如说每次修改订单状态之前先判断一下是不是某种状态,是就修改,不是就额外处理?
写回答
1回答
-
确实像你说的,有重复消费的隐患,根本方法还是要在接收消息的业务逻辑里做到可靠的Ack。
如果没有做到可靠的Ack,就要想办法对重复消息进行鉴别,比如像你说的判断订单状态
012021-08-13
相似问题