使用不同的收件人实例查看和完成邮件-Azure Service Bus

时间:2019-11-08 21:49:14

标签: azure azureservicebus servicebus

场景

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

当前设计

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

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

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

问题

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

所以我们只想做一个“窥视”而不是“接收”。

因此,客户端调用第一个API来获取数据,然后在此处进行窥视。

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

Service Bus Message Receiver的当前设计是,根据文档,只能使用执行Peek的同一Receiver实例执行Complete,并且在试用时也观察到相同。

>

这两个API都是两个单独的API,我们无法使用同一接收者实例来进行“窥视”和“完成”操作。

正在考虑通过某种方式使该App Service中的API成为Receiver作为Singleton的选项。 但是,当App Service向外扩展时,这将是一个问题。

有没有其他方法可以实现我们在这里要做的事情?

2 个答案:

答案 0 :(得分:2)

Azure服务总线中提供了一个选项来延迟消息。延迟邮件后,可以借助其序列号来接收它。

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

第二个客户端(具有序列号)可以从订阅中接收消息。有关更多详细信息,请参见here

答案 1 :(得分:1)

另一种选择是不在后端使用Service Bus客户端,而您的客户端可以使用其Service REST API直接与Service Bus一起使用(假设我了解您的情况,则他们不能使用AMQP客户端)正确)。

有一些API

如果您想使用自己的后端,或者如果已经使用APIM之类的服务,也可以代理这些请求。

PS:在MSDN forum

上交叉发布相同查询的答案