gpt4 book ai didi

architecture - 顺序很重要时丢失消息

转载 作者:行者123 更新时间:2023-12-02 00:13:53 26 4
gpt4 key购买 nike

我正在处理一种情况,我从现场的设备接收消息。这些消息已经被标记了序列号,我需要按照原来的顺序处理这些消息。消息丢失的情况很少见,但并非不可能,因此我需要一种机制来处理它。

我的实现是基于 NServiceBus 构建的,并且我正在使用“HandleCurrentMessageLater”功能在消息被乱序接收的情况下将消息弹出到队列的后面。

只要我最终收到序列中的下一条消息,这样我就可以处理积压的工作,这种方法就可以很好地工作。

在这种情况下,我有哪些选项可以处理丢失的消息?我的第一 react 是实现某种老化算法,在一定次数的失败尝试或类似操作后增加序列号,但是必须这样做的复杂性有点过分。

有没有人遇到过类似的问题并愿意分享他们是如何解决的?

谢谢

最佳答案

在我看来,这是您需要业务部门提供的信息。是否有时间限制,在该时间限制之后可以假定该消息不可撤销地丢失?如果是这样,在这种情况下应该采取哪些商业行动?如果最终收到该消息但在超时之后会发生什么情况?

您可以使用 Saga 实现这些案例。如果消息到达但顺序不对,那么您仍然会调用 HandleCurrentMessageLater,但您也会请求超时,以便如果在业务批准的超时后这些条件仍然为真,则补偿操作可以运行,其余的可以处理备份的消息。

或者,可能有替代解决方案。您说您需要按原始顺序处理消息。您没有详细说明这对现实生活的影响,但这听起来像是高级业务需求,而不是技术需求。换句话说,这就是企业希望看到的方式,但不一定是实际发生的方式。也许您可以正常处理有序消息,并增加一个值,该值指示收集的数据对哪个序列号有效。如果消息乱序到达,它们仍然可以被软处理,但序列号不会增加。

所以基本上你会收到消息 1-5 并正常处理它们。然后你收到 7-10(6 已被跳过)并处理它们,但 ValidSequenceNumber 仍然是 5。然后当 #6 到达时,你处理它,采取任何补偿措施来 catch ,ValidSequenceNumber 现在是 10。 Saga 也是实现这种逻辑的一个很好的候选者。

关于architecture - 顺序很重要时丢失消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137946/

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