在Microsoft Service Bus中使用临时队列作为请求/响应模式

时间:2013-05-07 14:55:50

标签: servicebus

请求/响应模式涉及向代理发送消息,并将Reply属性设置为QueueName,以向接收方指示用于返回路径的内容。

我见过的所有幻灯片都将回复队列显示为单个频道。当另一端的侦听器知道如何在该队列上正确地代理回复消息时,这可以正常工作。但是,这可以使得处理收到的消息不再是一种痛苦。

我见过为每个发送的消息构建一个新的唯一队列的代码,用于发送回复。然后,在接收方发回回复后,原始发送方从队列中取回应答并删除队列。这似乎可能是很多临时队列创建/破坏。

我看到的另一个选项是创建一个单独的回复频道作为主题,然后每个原始发件人在该主题上创建一个新的订阅,并针对correlationID == sendersID进行过滤。然后,当原始发件人收到该回复时,他们会删除该订阅。但是,这似乎是很多设置/拆除,只是为了收到消息回复。

  • 服务总线的解决方案是否健康?
  • 服务总线架构上是否有数百/数千个临时队列/订阅?

1 个答案:

答案 0 :(得分:4)

对于请求/回复关联,您通常有两个选项:

i)将消息与特定的"发件人"进行关联。或

ii)基于每条消息关联请求/响应

对于Service Bus,有3种实现关联的关键方法:

1)每个发件人的单独/唯一队列(比如单个请求队列和     然后每个发件人一个响应队列)。这适用于该选项     因为你可以计划,我上面有固定数量的发件人     根据上述配额相应的容量     (http://msdn.microsoft.com/en-us/library/ee732538.aspx

2)在单个队列中使用会话来关联     发件人/邮件组。当你有时,会话非常有用     订货和州管理要求,因为他们给你     严格的排序以及GetState / SetState来协调     特定会话消息的进展。这可用于上述两个选项。更多信息     这可以在这里找到:   - Session sample with Brokered messaging   - Request / Response Queue using Sessions samples

3)使用主题/订阅使用过滤器实现PubSub。在这里,如果你想创建一个每个发件人的订阅,那么你可以使用简单的SQL过滤器来实现。使用相关过滤器将允许您为每个订阅添加/删除大量过滤器(100,000),这样您就可以基于每个消息进行关联。例如,您有10个发件人,然后您创建一个包含10个订阅的主题。每次发件人处理请求时,它都会发送一条消息,同时在其订阅中添加一个correlation filter实例,其中包含该消息的correlationid值。收到响应后,发送方将为该消息删除该过滤器值。因此,每个订阅可以维护一组过滤器,这些过滤器指示发件人期望响应的每个消息的唯一过滤器。