如何使用 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 访问 Azure 中的队列消息?

如何通过 Python 使用 Azure Blob 存储

如何在 python 上使用 presto 连接到 Azure 数据湖存储?

如何在 Python 中从 Azure Databricks 插入 Azure SQL 数据库

如何使用 python 列出应用于 azure 资源组的锁