在存储队列触发的Azure函数中重新排队消息-不引发异常

时间:2019-11-14 09:49:24

标签: python azure azure-functions azure-queues

我想构建一个存储队列触发的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。

0 个答案:

没有答案