4

我试图在这个问题上做我的功课,但我无法进行任何搜索让我更接近答案。最接近的是Detect and Delete Orphaned Queues, Topics, or Subscriptions on Azure Service Bus

我的场景:

我有多个服务正在运行(标准 win 服务)。在启动时,这些进程开始订阅 Azure 服务总线中的给定主题。我们将主题称为“消息”。

当服务关闭时,它会以一种很好的方式取消订阅。

但有时会发生一些事情,服务崩溃,导致取消订阅失败,然后订阅就会挂起。

我的问题:

1)据我所见,当向该主题发送消息时,每个死主题订阅都会计数。即使没有人会捡起它。事实还是虚构?

2) 有没有办法删除一段时间未检查的订阅,例如最近 24 小时?最好通过 Power Shell 脚本?

我已直接向 Microsoft 提出此问题,但尚未收到任何答复。当然,我不可能是第一个体验到这一点的人。如果我得到任何第三方信息,我也会更新这个。

谢谢

约翰

4

2 回答 2

9

在 Azure SDK 2.0 版本中,我们使用该AutoDeleteOnIdle功能解决了这种情况。这将允许您在队列/主题/订阅上设置时间跨度,并且当在指定的持续时间内未检测到活动时,将自动删除实体。在这里查看详细信息,要设置的属性在这里

于 2013-05-21T19:38:11.233 回答
5

在您的 1) 问题上,是的,发送到某个主题的消息将被发送到任何匹配的订阅,即使那是空闲的(基于您自己的逻辑)。订阅是您创建的永久工件,它可以打开以接收消息,即使没有服务正在使消息出队。

要清除订阅,您可能可以使用 SubscriptionDescription 的 AccessedAt 属性并使用它来检查某人上次读取队列的时间(通过 Receive 操作)。 http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.subscriptiondescription.accessedat.aspx

如果您使用该逻辑,您可以构建自己的“清理”机制

高温高压

于 2013-05-21T06:01:41.140 回答