9

我想到的场景是这样的:服务总线用于实例到实例的通信,因此每个服务实例的订阅都是唯一的。最终结果是,如果一个实例没有正常关闭,它的订阅不会被删除。

当服务实例“死亡”并重新启动时,订阅的先前内容无关紧要,可以丢弃。

那么,有没有办法为服务总线订阅设置“生存时间”或模拟类似的东西,而不必求助于一些自定义的孤儿检测机制?

4

3 回答 3

7

从 Azure SDK 2.0 开始,这可以按预期工作。

此外,与其他报告相反,在我的测试中,只要有一个挂起的接收者正在监听该订阅,订阅就不会被删除。

var description = new SubscriptionDescription(topicPath, subscriptionId);
description.AutoDeleteOnIdle = TimeSpan.FromSeconds(600);
namespaceManager.CreateSubscription(description);
于 2013-09-17T17:01:49.513 回答
5

该确切功能已在下一个版本中积压。也就是说,在 azure 中,您可以使用角色环境中的实例 ID 来创建订阅的名称,从而让重新启动的实例重用订阅。实例 ID 名称是稳定的。

编辑:该功能是 AutoDeleteOnIdle https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptiondescription

于 2012-11-03T07:12:08.897 回答
1

我遇到了完全相同的问题,预览解决它于 2013 年初发布:http: //msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.subscriptiondescription.autodeleteonidle.aspx

它非常易于使用(参见下面的示例)。不幸的是,如果在 AutoDeleteOnIdle 期间没有发布消息,订阅似乎会超时,即使您有一些等待消息的进程(根据Azure Servicebus AutoDeleteOnIdle)。

NamespaceManager manager=NamespaceManager.CreateFromConnectionString(serviceBusConnectionString);
if(!manager.SubscriptionExists(topic,subscriptionName))
{
    manager.CreateSubscription(new SubscriptionDescription(topic,subscriptionName) {
        AutoDeleteOnIdle=TimeSpan.FromDays(2)
    });
}
于 2013-09-14T21:15:05.907 回答