好吧,我对服务总线还比较陌生。正在开发一个项目,我们使用 Azure 服务总线对消息进行排队。我们的架构大致如下所示:
所以我们的想法是,在我们的 SourceSystem 中会发生各种各样的事情,这会导致消息被放到 servicebustopics 上。现在我们的责任是将这些事件同步到外部客户端,以便他们知道我们在做什么。
现在的问题是,目前我们不使用服务总线 session ,因此无法保证消息顺序。另请考虑以下场景:
订单已创建 订单更新1 订单更新2 订单已关闭
现在发生的情况是,如果 externalclients API 因 OrderUpdate 1 和 OrderUpdate 2 而关闭,我们可能会按顺序发送消息:OrderCreated、OrderClosed、OrderUpdate 1、OrderUpdate 2。
目前,我们只是重试消息几次,然后将其移入死信队列以进行手动重新处理。
我们应该采取哪些措施来更好地保证消息顺序?我感觉在订单范围内,消息顺序是需要保证的。
我们是否应该强制源系统将订单的所有消息放入服务总线 session 中?但是我们如何处理多个主题呢?如果 session 中的消息 1 最终进入死信,我们该怎么办?
这里有很多考虑因素,我们是否应该使用单个主题以便更容易管理 session ?但这会带来其他问题,因为同一主题中存在不同的消息结构?
我很想听听您对此的看法
最佳答案
看看Durable Functions在 azure 中。您可以使用“异步 Http API”或其他模式之一来实现您需要执行的编排。 NServicebus 的 Sagas 也可能是一个不错的选择,这里有一篇文章 very good comparison NServicebus 和 Durable Functions 之间。
关于azure - 架构问题-Azure服务总线和消息顺序保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59961514/