python - 在存储队列触发的 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。
解决方案
推荐阅读
- vue.js - 应用过渡时,vuetify v-alert 错误地关闭兄弟姐妹
- python - Python - pypdf2 extractText() 不工作
- python - 从列表列表中绘制热图
- next.js - Nextjs:getStaticProps 中未定义的上下文
- duplicates - 在R中将唯一值变成重复值
- android - 如何在顶部/前面获取带有文本的图像?(谷歌课堂首页图片格式)
- sql - 每当将患者记录插入患者表时,编写触发器以查找并填写患者的年龄
- asp.net - WCF:匹配特定的 WS-Security 方案(签名、加密、用户密码)
- vba - 防止word doc以只读方式打开,编译错误
- android - Flutter:来自小部件列表的自定义多项选择行