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