为什么会收到“提供的锁无效”的信息。我尝试使用LockTocken删除队列消息时出现错误

时间:2019-06-19 10:04:44

标签: python azure message-queue azureservicebus

我正在使用python语言来通过Azure总线服务队列发送和接收消息。

使用以下代码从队列中删除消息时,我收到“提供的锁无效。该锁已过期,或者消息已从队列中删除。”

  

sbs.delete_queue_message('taskqueue',5,'ef4e2189-bfef-42ac-ba09-7fd20287f6a9')   sbs.delete_queue_message('taskqueue','SequenceNumber','LockToken')

from azure.servicebus.control_client import ServiceBusService, Message, Topic, Rule, DEFAULT_RULE_NAME
key_name = '###############' # SharedAccessKeyName from Azure portal
key_value = '####################' # SharedAccessKey from Azure portal
service_namespace = '###########'
sbs  = ServiceBusService(service_namespace,shared_access_key_name=key_name,shared_access_key_value=key_value)      


msg = sbs.receive_queue_message('taskqueue')
sbs.delete_queue_message('taskqueue',5,'ef4e2189-bfef-42ac-ba09-7fd20287f6a9')

3 个答案:

答案 0 :(得分:3)

最终可以通过将Web门户的锁定持续时间从默认值延长为300秒来解决上述问题。

增加锁定时间后,我可以成功运行我的项目,而没有任何与锁定有关的错误。

答案 1 :(得分:0)

如果处理消息的时间长于为队列指定的MaxLockDuration,则锁可能过期。检查taskqueue队列的值是什么,以及从收到消息到调用delete_queue_message()为止,消息处理的持续时间是多长时间。

另一个考虑是预取,但是我不确定是否为Python客户端启用了它。值得验证它设置为零还是在等待处理时不会导致消息丢失锁。

答案 2 :(得分:0)