微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Azure服务总线PeekLock仅在五秒钟后超时

我正在使用Service Bus在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);

?>

代码执行完美 – 检索邮件,显示正文,并删除邮件.但是,如果我插入睡眠(5);就在deleteMessage()调用之前,Service Bus 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分钟…你可以在创建sb队列时自定义它使用QueueDescription.

原文地址:https://www.jb51.cc/php/136666.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐