我已经尝试过在这个问题上做作业,但是没有我能做的搜索让我更接近答案 . 最接近的是Detect and Delete Orphaned Queues, Topics, or Subscriptions on Azure Service Bus .
我的情景:
我有多个服务正在运行(标准win服务) . 在启动时,这些进程开始订阅Azure Service Bus中的给定主题 . 我们将主题称为“消息” .
当服务关闭时,它会以一种很好的方式取消订阅 .
但有时会发生一些事情并且服务崩溃,导致取消订阅失败,然后订阅就会挂起 .
我的问题:
1)从我所看到的情况来看,每个死主题订阅都会在邮件发送到该主题时计算 . 即使没有人会去接它 . 事实还是虚构?
2)无论如何都要删除一段时间未检查过的订阅,例如过去24小时?最好是Power Shell脚本吗?
我直接向微软提出这个问题,但尚未收到任何答复 . 当然,我不能成为第一个体验这一点的人 . 如果我收到任何第三方信息,我也会更新此信息 .
谢谢
约翰
2 回答
在您的1)问题上,发送给主题的是消息将被发送到任何匹配的订阅,即使这是空闲(基于您自己的逻辑) . 订阅是您创建的永久工件,即使没有服务将消息出列,也可以接收消息 .
要清除订阅,您可以使用SubscriptionDescription的AccessedAt属性,并使用它来检查有人上次读取队列的时间(通过接收操作) . http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.subscriptiondescription.accessedat.aspx
如果您使用该逻辑,您可以构建自己的“清理”机制
HTH
在Azure SDK 2.0版本中,我们使用
AutoDeleteOnIdle
功能解决了此问题 . 这将允许您在队列/主题/订阅上设置时间 Span ,并且在指定的持续时间内未检测到任何活动时,将自动删除该实体 . 查看详细信息here,要设置的属性为here .