为什么当我尝试使用 LockTocken 删除队列消息时出现"The lock supplied is invalid."错误



我正在使用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')

终于能够通过从门户网站将锁定持续时间从默认值增加到 300 秒来解决上述问题。

增加锁定持续时间后,我能够成功运行我的项目,而不会出现任何类型的锁定相关错误。

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

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

尝试增加lock_duration。

完成后,这里是服务总线 v7 中的编码 https://pypi.org/project/azure-servicebus/7.0.0/

https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/servicebus/azure-servicebus/samples/sync_samples/receive_queue.py

相关内容

最新更新