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