如何使用Python Azure Functions QueueTrigger手动使消息出队?

问题描述

我正在使用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 参数以在特定的延迟后使消息“处于活动状态”,如果我理解正确,这就是您要采取的措施。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...