问题描述
我正在使用Azure Functions队列触发器读取队列消息并使用Python处理工作。我将batchSize
参数设置为1
以限制并发。在Python代码中,我还进行了另一项检查,以查看是否可以按以下步骤处理工作:
if work is ready:
do_work()
else:
dequeue the message and try again
如果工作尚未准备好进行处理,我想使消息出队,然后在一分钟内重试。我认为只要将visibilityTimeout
设置为00:01:00
就可以实现重试。但是出队消息的最佳方法是什么?会是:
if work is ready:
do_work()
else:
raise Exception("work is not ready,dequeue the message")
这是否可以使邮件出队并在一分钟内重试?这种用例相当少见,我想知道是否有更好的方法,因为我不确定是否要在这种情况下在日志中看到错误。
编辑:是否可以在我的Python QueueTrigger中使用initialVisibilityDelay
?如果我可以将消息的可见性延迟一分钟,则无需我抛出异常。
解决方法
是否可以在我的Python中使用initialVisibilityDelay QueueTrigger?
您最初如何将消息放入队列?如果是Azure Queue storage output binding,那么我认为您不能轻易设置初始可见性延迟。
不过,您可以使用队列的put_message函数来归档所需的内容:
put_message(queue_name,content,visibility_timeout=None,time_to_live=None,timeout=None)
如您所见,它接受 visibility_timeout 参数以在特定的延迟后使消息“处于活动状态”,如果我理解正确,这就是您要采取的措施。