gpt4 book ai didi

spring-boot - 至少一次传递的 RabbitMQ 消息可靠性

转载 作者:行者123 更新时间:2023-12-05 06:59:34 24 4
gpt4 key购买 nike

我想问的是,当其中一条消息被拒绝时,在微服务之间交换消息时保持可靠性的可能性有多大。从今天开始,我们不想丢失消息,所以我们正在重新排队这些被拒绝的消息。因此,存在以与预期不同的顺序处理消息的风险。举个简单的例子,我们以两个微服务A和B的简单架构为例,A先后发布了两条消息:

{"productStatus": "PUSBLISHED", "productId": 1}
{"productStatus": "SOLD", "productId": 1}

微服务 B 拒绝第一条消息但接受第二条消息。由于我们正在重新排队所有被拒绝的消息,我们正在再次处理具有 PUBLISHED 生产者状态的消息,因此微服务 B 有关于产品 1 状态的错误信息。想到的一个简单解决方案是将 objectVersionNumber 添加到每个消息中,以便消费者可以知道他已经处理了对象的最新版本:

{"productStatus": "PUSBLISHED", "productId": 1, "objectVersionNumber": 1}
{"productStatus": "SOLD", "productId": 1, "objectVersionNumber": 2}

还有其他方法可以解决这个问题吗?也许消息的语义应该完全改变?

最佳答案

prefetch 设置为 1 将保留消息顺序(以牺牲性能为代价)。

关于spring-boot - 至少一次传递的 RabbitMQ 消息可靠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64386376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com