在存储队列中重新请求消息触发Azure函数而不引发异常

2024-04-25 11:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想构建一个存储队列触发的Azure函数(在python中)来执行一些处理(基本上是调用一些外部API),如果调用不成功,我想在达到最大重试次数之前对消息重新排队。我可以很好地做到这一点,只要在函数中引发一个异常,它就会在我在主机.jsonvisibilityTimeout。唯一的问题是引发一个异常会将整个函数的执行标记为失败,这会导致监控混乱等

所以我的问题是:我能否实现使用内部重试的相同行为,包括最终的出列计数器和发送到中毒队列,而不引发异常?在不手动克隆消息的情况下,休眠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!")

毕竟,这也可以通过持久的功能来实现。但是我需要一个Python的解决方案,而持久函数目前还不支持Python。你知道吗


Tags: 函数infoapi消息队列queueloggingcount