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 在五秒后超时的主要内容,如果未能解决你的问题,请参考以下文章
js实现每次程序发送一个数据 ,多次发送不一样,5秒后继续执行多次程序,判断如果五秒后发送过来的数据和上次不一样,少的删除多的增加