我想构建一个存储队列触发的Azure函数(在python中),该函数执行一些处理(基本上是调用某些外部API),并且如果该调用未成功,我想延迟一段时间重新排队消息,直到达到最大重试计数。当我简单地在Function中引发一个异常,并且在host.json visibilityTimeout
中指定的时间之后,它将重新排队时,我可以做到这一点。唯一的问题是,引发异常会将整个Function执行标记为失败,从而使监视混乱。
所以我的问题是:是否可以在不引发异常的情况下实现使用内部重试的相同行为,包括出队计数器和最后发送到中毒队列?并且无需手动克隆邮件,只需休眠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。