繁体   English   中英

Azure Service Bus Topic订阅服务器锁定已过期异常

[英]Azure Service Bus Topic Subscriber lock expired exception

我有一个Web作业,通过注册OnMessage回调来使用Azure服务总线主题中的消息。 消息锁定持续时间设置为30秒锁定更新超时设置60秒 由于此类作业需要30秒钟以上的时间来处理服务总线消息,因此发生了锁过期异常。

现在,我已将消息锁定持续时间设置为大于锁定更新超时时间。 但是不知何故,它仍然抛出相同的异常。 我也重新开始了我的网络工作,但是仍然没有运气。

我尝试使用更高的设置运行来自不同主题的 相同webjob消耗消息,但效果很好。 这是预期的行为吗?此设置更改会在多少时间后正常反映出来。

任何帮助都会很棒

我已将消息锁定持续时间设置为大于锁定更新超时时间。 但是不知何故,它仍然抛出相同的异常。

锁定持续时间的最大值为5分钟。 如果您需要不到5分钟的时间来处理作业,则可以增加消息的锁定时间,以满足您的要求。

如果需要5分钟以上的时间来处理作业 ,则需要设置OnMessageOptions的AutoRenewTimeout属性。 如果锁在到达AutoRenewTimeout之前已过期,它将更新锁。 例如,如果将锁定持续时间设置为1分钟,并将AutoRenewTimeout设置为5分钟。 如果您不释放锁,该消息将保持锁定状态最多5分钟。

这是我用来测试锁定持续时间和AutoRenewTimeout的示例代码。 如果作业花费的时间超过锁定持续时间和AutoRenewTimeout,它将在我们完成消息后抛出异常(这表示发生了超时)。 我还修改了门户网站上的锁定时间,并且在收到消息时将立即应用该配置。

SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString(connectionString, "topic name", "subscription name");

// Configure the callback options.
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.AutoRenewTimeout = TimeSpan.FromSeconds(60);

Client.OnMessage((message) =>
{
    try
    {
        //process the message here, I used following code to simulation a long time spent job
        for (int i = 0; i < 30; i++)
        {
            Thread.Sleep(3000);
        }
        // Remove message from subscription.
        message.Complete();
    }
    catch (Exception ex)
    {
        // Indicates a problem, unlock message in subscription.
        message.Abandon();
    }
}, options);

对于您的问题,请检查您的工作将花费多少时间,并选择一种正确的方法来设置锁定持续时间和AutoRenewTimeout。

设置应几乎立即反映出来。 同样,锁更新可能应该超过锁持续时间或被禁用。

锁定更新功能是ASB客户端功能,它不会覆盖在实体上设置的锁定持续时间。 如果您可以重现此问题并共享该repro,请向Microsoft提出支持问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM