场景
执行业务交易时,我们应该向最终客户提供该数据。
当前设计
我们的 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/