azure - 使用不同接收器实例查看并完成消息 - Azure 服务总线

标签 azure azureservicebus servicebus

场景

执行业务交易时,我们应该向最终客户提供该数据。

当前设计

我们的 Web 应用程序发布的事务消息已添加到 Azure 服务总线上的主题。

我们向客户端公开 API,他们可以通过这些 API 使用这些交易中的数据。

调用这些 API 后,我们从订阅中读取消息并将其返回给客户端。

问题

我们想要有保证的交付 - 我们希望确保客户确认数据的交付。因此我们不想立即从订阅中删除该消息。我们希望保留它直到客户确认为止。

所以我们只想进行“查看”而不是“接收”。

因此,客户端调用第一个 API 来获取数据,我们在其中进行 Peek。

一旦客户端收到数据包,客户端将调用第二个 API 进行确认。 此时,我们要从订阅中删除消息,使其完成。

服务总线消息接收器的当前设计是,根据文档,只能使用执行 Peek 的同一接收器实例来执行 Complete,并且我们在尝试时也观察到了相同的情况。

这两个 API 都是两个独立的 API,我们无法使用同一接收器实例执行 Peek 和 Complete 操作。

考虑以某种方式使接收器成为跨该应用服务中的 API 的单例的选项。 然而,当应用服务横向扩展时,这将是一个问题。

是否有不同的方法来实现我们在这里尝试做的事情?

最佳答案

Azure 服务总线中有一个选项可以延迟消息。一旦消息被延迟,就可以借助其序列号来接收该消息。

第一个客户端应该接收消息,而不是完成它,它应该推迟并返回它。

第二个客户端(具有序列号)可以从订阅接收消息。请参阅here了解更多详情。

关于azure - 使用不同接收器实例查看并完成消息 - Azure 服务总线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58774187/

相关文章:

azure - 服务总线/请求转发

.net - 尝试在 Azure Publish 上验证图形客户端时出现异常 : "Failed to acquire token silently. Call method AcquireToken"

azure - 如何决定在 Azure 事件中心中使用多少个分区

c# - Windows Azure 移动服务

azure - BrokeredMessage Body 与 message.Properties 之间的区别?

python - Azure 服务总线队列发送和接收消息的测试

Django : How can we manage groups and permissions if we use the Microsoft Azure Authentication

azure - 从 Azure ServiceBus 基础结构调用 WebJob(不要连续运行 WebJob)

azure - Azure 服务总线中消息单元可以支持的最大吞吐量和消息速率是多少

session - 服务总线 - 按序列号从 session 中检索消息