为什么在尝试使用 LockTocken 删除队列消息时出现 "The lock supplied is invalid." 错误
Why am I getting "The lock supplied is invalid." error when I am trying to delete queue message using LockTocken
我正在使用 python 语言通过 Azure 总线服务队列发送和接收消息。
使用以下代码从队列中删除消息时,我得到 "The lock supplied is invalid.Either the lock expired, or the message has already been removed from the queue"。
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')
如果消息的处理时间超过为队列指定的 MaxLockDuration
,则锁可能会过期。检查 taskqueue
队列的值是什么,以及从收到消息到调用 delete_queue_message()
.
消息处理的持续时间
另一个考虑因素是预取,但我不确定它是否为 Python 客户端启用。值得验证它是否设置为零或不会导致消息在等待处理时失去锁定。
终于能够通过从 Web 门户将锁定持续时间从默认值增加到 300 秒来解决上述问题。
增加锁定持续时间后,我能够成功地运行我的项目,没有任何与锁定相关的错误。
尝试增加 lock_duration.
完成后,这是servicebus v7中的代码https://pypi.org/project/azure-servicebus/7.0.0/
我正在使用 python 语言通过 Azure 总线服务队列发送和接收消息。
使用以下代码从队列中删除消息时,我得到 "The lock supplied is invalid.Either the lock expired, or the message has already been removed from the queue"。
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')
如果消息的处理时间超过为队列指定的 MaxLockDuration
,则锁可能会过期。检查 taskqueue
队列的值是什么,以及从收到消息到调用 delete_queue_message()
.
另一个考虑因素是预取,但我不确定它是否为 Python 客户端启用。值得验证它是否设置为零或不会导致消息在等待处理时失去锁定。
终于能够通过从 Web 门户将锁定持续时间从默认值增加到 300 秒来解决上述问题。
增加锁定持续时间后,我能够成功地运行我的项目,没有任何与锁定相关的错误。
尝试增加 lock_duration.
完成后,这是servicebus v7中的代码https://pypi.org/project/azure-servicebus/7.0.0/