首页 文章

删除Azure Service Bus中的死主题

提问于
浏览
4

我已经尝试过在这个问题上做作业,但是没有我能做的搜索让我更接近答案 . 最接近的是Detect and Delete Orphaned Queues, Topics, or Subscriptions on Azure Service Bus .

我的情景:

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

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

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

我的问题:

1)从我所看到的情况来看,每个死主题订阅都会在邮件发送到该主题时计算 . 即使没有人会去接它 . 事实还是虚构?

2)无论如何都要删除一段时间未检查过的订阅,例如过去24小时?最好是Power Shell脚本吗?

我直接向微软提出这个问题,但尚未收到任何答复 . 当然,我不能成为第一个体验这一点的人 . 如果我收到任何第三方信息,我也会更新此信息 .

谢谢

约翰

2 回答

  • 9

    在您的1)问题上,发送给主题的是消息将被发送到任何匹配的订阅,即使这是空闲(基于您自己的逻辑) . 订阅是您创建的永久工件,即使没有服务将消息出列,也可以接收消息 .

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

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

    HTH

  • 5

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

相关问题