如何使用 Python Azure Functions QueueTrigger 手动使消息出队?
Posted
技术标签:
【中文标题】如何使用 Python Azure Functions QueueTrigger 手动使消息出队?【英文标题】:How do you manually dequeue a message using a Python Azure Functions QueueTrigger? 【发布时间】:2021-02-10 04:28:16 【问题描述】:我正在使用 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
?如果我可以将消息的可见性延迟一分钟,这将消除我引发异常的需要。
【问题讨论】:
【参考方案1】:是否可以在我的 Python 中使用 initialVisibilityDelay 队列触发器?
您最初是如何将消息放入队列的?如果是Azure Queue storage output binding,那么我认为您无法轻松设置初始可见性延迟。
但是,您可以使用队列的 put_message 函数来归档您想要的内容:
put_message(queue_name, content, visibility_timeout=None, time_to_live=None, timeout=None)
如您所见,它接受 visibility_timeout 参数以在特定延迟后使消息“激活”,如果我理解正确,这就是您所追求的。
【讨论】:
我在 Blob Created 事件上使用事件网格订阅。我更喜欢使用事件网格而不是创建一个使用put_message()
的新 Azure 函数,因为它会节省资源以上是关于如何使用 Python Azure Functions QueueTrigger 手动使消息出队?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 快速将消息发送到 Azure 队列存储?
如何在 python 上使用 presto 连接到 Azure 数据湖存储?