Azure Service Bus AutoDeleteOnIdle

时间:2013-06-06 20:21:05

标签: azure azureservicebus

我在设置AutoDeleteOnIdle时试图找出正确的行为。我有一个名为MyGameMessages的主题(不公开游戏名称,因为它可能被视为广告)。

我所做的是在服务器场中的每个节点上创建订阅。

var manager = GetNameSpaceManager();
_subscriptionId = Guid.NewGuid().ToString();
var description = new SubscriptionDescription(topic, _subscriptionId);
description.AutoDeleteOnIdle = TimeSpan.FromHours(1);
manager.CreateSubscription(description);

然后我开始一个非常循环的线程(或者至少在发出戒烟信号之前)

while(_running)
{
    if (_subscriptionId == null)
        break;

    var message = client.Receive(TimeSpan.FromMinutes(1)); // MARK A
    if (message != null)
    {
        var body = message.GetBody<T>();
        // Do stuff with message
        message.Complete();
    }

}

问题A:

第一个实现在MARK A没有超时。如果在一小时内没有向该主题发送消息,则自动重新订阅该订阅。这是预期的行为吗?客户端并没有真正死亡,但我想它只是在等待消息。没有活着吗?

问题B:

在MARK A中添加超时是否有帮助,或者它是一个更好的解决方案,每50分钟创建一个新的订阅(为了以防万一创建一个小的重叠)并放弃旧的?

由于

约翰

1 个答案:

答案 0 :(得分:2)

Johan,您在上面描述的场景应该符合您的期望。即使没有消息流动,待处理的接收呼叫也会使订阅保持活动状态。使用较长的接收超时时间会更好,因此当消息量较低时,您不会有繁忙的流量。要确认的一件事是,如果您正在为主题设置AutoDeleteOnIdle值,那么订阅上的接收将不会使主题保持活动状态,如果没有消息被发送到主题一小时,那么它将获得删除。删除主题会导致所有订阅也被删除。

您是否仍然看到订阅被删除的行为?如果是,那么请创建一个包含Azure实时站点支持的票证,然后产品团队调查具体细节。