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

标签 php azure servicebus

我正在使用服务总线在 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/

相关文章:

php - XML 中包含 "&"的字符串出错。我怎样才能解决这个问题?

php - CKEditor + Yii 加载 AJAX : $_POST doesn't contain the updated value

php - session 变量是否保留在 php 中的内存中

php - 声明类型提示时,PhpStorm是否允许跳过PHPDoc标记?

Azure Web App Service - 如何强制非 WWW 转到 WWW?

azure - 您能举个例子解释一下 Microsoft Azure 中的 Append Blob 吗?

Azure CI 管道忽略了我的 botdetect.xml 文件

azure - 确保服务总线安全

azure - 如何从 Microsoft Azure EventHub 获取事件计数?

c# - 在.Net core控制台应用程序中使用Azure服务总线