azure - 架构问题-Azure服务总线和消息顺序保证

标签 azure exception architecture azureservicebus dead-letter

好吧,我对服务总线还比较陌生。正在开发一个项目,我们使用 Azure 服务总线对消息进行排队。我们的架构大致如下所示:

Architecture

所以我们的想法是,在我们的 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/

相关文章:

java - 将文件从 Azure 文件共享目录移动到 unix 目录和备份目录(在 Azure 文件共享内)

c# - AcquireTokenAsync 仅在控制台应用程序中工作

python - 在 Pyside 插槽中意外处理异常

ios - 如何让 CoreAnimation 在动画过程中不忽略异常?

architecture - ASP.NET MVC 2 Preview 1 - 实现区域的最佳方法是什么?

c# - 访问azure存储服务

使用 chef 创建的 linux azure vm 在尝试引导甚至给出 rsa 文件时询问 ssh 密码?

python - 使用 Python/SUDS 设置 IncludeExceptionDetailInFaults

c# - 在 C# 应用程序中保护数据层

java - Libgdx:创建其他对象的对象