我正在使用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')
答案 0 :(得分:3)
最终可以通过将Web门户的锁定持续时间从默认值延长为300秒来解决上述问题。
增加锁定时间后,我可以成功运行我的项目,而没有任何与锁定有关的错误。
答案 1 :(得分:0)
如果处理消息的时间长于为队列指定的MaxLockDuration
,则锁可能过期。检查taskqueue
队列的值是什么,以及从收到消息到调用delete_queue_message()
为止,消息处理的持续时间是多长时间。
另一个考虑是预取,但是我不确定是否为Python客户端启用了它。值得验证它设置为零还是在等待处理时不会导致消息丢失锁。
答案 2 :(得分:0)
尝试增加 lock_duration。
完成后,这是 servicebus https://pypi.org/project/azure-servicebus/7.0.0/
v7 中的代码