Azure 服务总线 PeekLock 在五秒后超时

Posted

技术标签:

【中文标题】Azure 服务总线 PeekLock 在五秒后超时【英文标题】:Azure Service Bus PeekLock is timing out after just five seconds 【发布时间】:2012-12-17 17:05:24 【问题描述】:

我正在使用服务总线在 Azure 上构建一个消息队列,通过 php SDK 工作,并且遇到了一些 PeekLock 消息超时太快的问题。

我可以连接到队列并使用 PeekLock 检索消息,但是,如果我删除消息的时间超过 5 秒,Azure 会引发 404 错误,指示锁定已过期,并且消息会被放回就好像它从未被处理过一样排队。

这是我使用的一些测试代码的示例。假设在此示例中已加载 Azure SDK 并且已引用相应的命名空间。

<?php

  // .. load the sdk and namespaces etc ...

  $service_bus = ServicesBuilder::getInstance()->createServiceBusService([connection string goes here]);

  $options = new ReceiveMessageOptions();
  $options->setPeekLock();

  $message = $service_bus->receiveQueueMessage("[queue name here]", $options);
  print "message body is: " . $message->getBody();
  $service_bus->deleteMessage($message);

?>

这段代码完美执行——检索消息,显示正文,然后删除消息。但是,如果我在 deleteMessage() 调用之前插入 sleep(5);,服务总线 API 会返回以下错误:

错误:提供的锁无效。锁已过期,或者消息已从队列中删除。

通过 Azure 门户创建队列时,我将锁定超时时间明确设置为 5 分钟,并且我尝试在其他队列上设置不同的超时时间,但所有队列仍然恢复为 5 秒到期。

我在这里做错了什么?

问题已解决:

我收到了 Azure 支持团队的回复,他们很快发现 Azure 门户没有保留在创建队列时选择的锁定持续时间。默认到期时间显然是 5 秒(尽管我在任何文档中都找不到对此默认值的任何引用,这很烦人),这就是它超时的原因。

所以无论如何,开发团队显然正在努力修复,一切应该很快就会正常。

【问题讨论】:

【参考方案1】:

实际上默认的MessageLock持续时间默认为60秒(使用C# sdk创建时,我不确定php sdk)...您可以将其增加到5分钟...您可以在创建时自定义它使用 QueueDescription 的 sb 队列。

【讨论】:

【参考方案2】:

指定默认锁定持续时间here。

【讨论】:

以上是关于Azure 服务总线 PeekLock 在五秒后超时的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL 窗口函数 LAST_VALUE 在五秒内

js实现每次程序发送一个数据 ,多次发送不一样,5秒后继续执行多次程序,判断如果五秒后发送过来的数据和上次不一样,少的删除多的增加

五秒后页面自动跳转

接收普通消息

如何获取微信用户openid

html页面只让五秒后刷新一次,只刷新一次,怎么做呀,求完整js代码。