【发布时间】:2012-09-08 22:03:09
【问题描述】:
如果由于崩溃或其他异常终止(实例重启等)而不再有任何发布者或订阅者读取或写入队列、主题或订阅,那么该队列/主题/订阅是否有效地孤立了?
我通过创建几个队列然后终止应用程序对此进行了测试。很长一段时间后,这些队列仍在服务总线上。似乎他们将永远呆在那里。如果我们想要这种行为,那就太好了,但在这种情况下,我们不需要。
我们如何检测和删除这些队列、主题和订阅?它们将计入 Azure 限制等,并且我们不能在每次实例重新启动/修补/崩溃时都拥有这些孤立进程。
如果它有助于使问题更清晰,这是一种独特的情况,其中队列/主题/订阅具有特殊名称或特殊过滤器,并且发布者 (1) 和订阅者的集合非常有限(1) 限时。这不是我们想要生存能力的情况。这些是特定于实例的响应渠道。我们是使用队列还是订阅并不重要。如果实例消失了,那么对该队列(或订阅)的需求也会消失。
这是解决方案的一部分,在该解决方案中,每个 Web 角色都有其监控的专用响应通道。在任何时候,这个 Web 角色都可能有几十个通过其他消息传递通道(队列/主题)等待处理的请求,并且它正在多个线程上等待答案。我们需要将响应返回到放置消息的线程,以便 Web 角色可以响应调用者。在这种情况下,简单地拥有基于机器的订阅是没有好处的,因为它将接收其他线程的消息。我们需要每个发布线程建立一个专门的响应通道,这样通道上唯一的东西就是该线程的响应。
即使我们使用 Subscriptions(带有某种与实例相关的过滤器)对 Subscription 执行长轮询接收操作,如果 Web 角色实例死亡,该 Subscription 也会成为孤立的,对吗?
这个问题可以归结为: 如果队列/主题/订阅不再有发布者或订阅者,则该服务实际上是孤立的。如何检测和清理这些孤儿?
【问题讨论】:
-
我们能否澄清一下您所说的是 Azure 中的队列(云中的 SB)或 Windows Server 的本地服务总线队列(服务总线 1.0 Beta)?
标签: azure appfabric servicebus azure-appfabric