gpt4 book ai didi

php - Azure 服务总线 PeekLock 仅五秒后就超时

转载 作者:可可西里 更新时间:2023-11-01 12:39:53 25 4
gpt4 key购买 nike

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

我可以使用 PeekLock 连接到队列并检索消息,但是,如果我删除消息的时间超过五秒,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 将返回以下错误:

Error: The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue.

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

我在这里做错了什么?

已解决的问题:

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

无论如何,开发团队显然正在致力于修复,一切都应该很快就能正常工作。

最佳答案

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

关于php - Azure 服务总线 PeekLock 仅五秒后就超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com