我想到的情况是:使用服务总线用于实例到现实的通信,因此订阅是每个服务实例唯一的。最终结果是,如果实例不优雅地关闭,则其订阅不会被删除。
当服务实例"死亡"并重新启动时,订阅的先前内容无关紧要,可以丢弃。
那么,是否有一种方法可以为服务总线订阅或模拟类似的东西设置"生活时间",而无需诉诸某些自定义孤儿检测机制?
从Azure SDK 2.0开始,这是预期的。
另外,与其他报告相反,在我的测试中,只要有待处理的接收器收听该订阅,就不会删除订阅。
var description = new SubscriptionDescription(topicPath, subscriptionId);
description.AutoDeleteOnIdle = TimeSpan.FromSeconds(600);
namespaceManager.CreateSubscription(description);
该确切功能在下一个版本之一的积压库上。也就是说,在Azure中,您可以通过"角色环境"来创建订阅的名称,从而具有重新启动的实例重复使用订阅。实例ID名称稳定。
编辑:该功能是autodeleteonidle https://learn.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptionDescription.subscriptionDescription
我遇到了完全相同的问题,预览求解它已于2013年开始发布:http://msdn.microsoft.com/en-us/library/library/microsoft.service.servicebus.servicebus.messaging.subscriptionDescriptionDescriptionDeScripti.autodeleteonidle.aspx
这很容易使用(请参见下面的示例)。不幸的是,即使您有一些正在等待消息的过程(根据Azure ServiceBus AutodeleteTeonle)。
NamespaceManager manager=NamespaceManager.CreateFromConnectionString(serviceBusConnectionString);
if(!manager.SubscriptionExists(topic,subscriptionName))
{
manager.CreateSubscription(new SubscriptionDescription(topic,subscriptionName) {
AutoDeleteOnIdle=TimeSpan.FromDays(2)
});
}