【问题标题】:Azure Servicebus AutoDeleteOnIdleAzure 服务总线 AutoDeleteOnIdle
【发布时间】:2013-06-06 20:21:05
【问题描述】:

我试图找出设置 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 分钟创建一个新订阅(以创建一个小的重叠以防万一)并放弃旧订阅是更好的解决方案?

谢谢

约翰

【问题讨论】:

    标签: azure azureservicebus


    【解决方案1】:

    Johan,您在上面描述的场景应该符合您的期望。即使没有消息在流动,挂起的接收调用也会使订阅保持活动状态。对接收使用更长的超时时间会更好,这样当消息量较低时,您就不会遇到烦人的流量。要确认的一件事是,如果您正在为主题设置 AutoDeleteOnIdle 值,在这种情况下,订阅接收不会使主题保持活动状态,如果一小时内没有消息发送到主题,那么它将被删除。删除主题会导致所有订阅也被删除。

    您是否仍然看到这种订阅被删除的行为?如果是这样,请使用 Azure 实时站点支持和产品团队创建票证并调查具体情况。

    【讨论】:

    • 我添加了一个计时器,它每 30 分钟向主题发送一条消息。这使订阅保持活跃。如果我不这样做,它将被删除。感谢您指出正确的行为。我会向团队提交一张票!很抱歉延迟接受。
    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2021-12-30
    • 2014-10-20
    • 2012-10-03
    相关资源
    最近更新 更多