首页 > 解决方案 > 在存储队列触发的 Azure 函数中重新排队消息 - 不引发异常

问题描述

我想构建一个存储队列触发的 Azure 函数(在 python 中),它执行一些处理(基本上调用一些外部 API),如果该调用不成功,我想重新排队消息,直到最大重试计数到达了。我可以很好地做到这一点,当我只是在函数中引发一个异常并且它会在我在 host.json 中指定的时间后重新排队visibilityTimeout。唯一的问题是引发异常会将整个函数执行标记为失败,这会使监控等变得混乱。

所以我的问题是:我能否在不引发异常的情况下实现使用内部重试的相同行为,包括出队计数器和最终发送到毒队列?并且无需手动克隆消息,休眠 x 秒,然后再次手动将其写入队列。

基本上我有这样的东西:

def main(msg: func.QueueMessage) -> None:
    logging.info('Python queue trigger function processed a queue item: %s',
                 msg.get_body().decode('utf-8'))
    logging.info('dequeue_count: %i', msg.dequeue_count)
    # Do some more processing...
    raise Exception("Error. Will be retried in a few seconds!")

毕竟,这也可以通过 Durable Functions 来实现。但我需要在 Python 中有一个解决方案,并且持久函数从今天起不支持 python。

标签: pythonazureazure-functionsazure-queues

解决方案


推荐阅读