我使用Visual Studio Code创建了一个 Azure 服务总线队列触发器 Python 函数,如果我的代码失败,我想将消息返回到服务总线队列。
import requests
import azure.functions as func
from requests.exceptions import HTTPError
def main(msg: func.ServiceBusMessage):
message = msg.get_body().decode("utf-8")
url = "http://..."
# My code
try:
requests.post(url=url, params=message)
except Exception as error:
logging.error(error)
# RETURN MESSAGE TO QUEUE HERE
我找到了有关名为unlock((和abandon((的方法的一些信息,但我不知道如何实现它。以下是此类文档的链接:
- 解锁:https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-queues#handle-application-crashes-and-unreadable-messages
- 放弃:https://learn.microsoft.com/en-us/python/api/azure-servicebus/azure.servicebus.common.message.deferredmessage?view=azure-python#abandon--
我还发现,如果函数失败,队列会自动将消息发送到队列,但是,我应该写一个raise...在函数中发送异常吗?
另外,有没有办法将此消息返回到队列并设置稍后重试的计划?
服务总线触发器 python 函数在 PeekLock 模式下运行。您不必调用 unlock(( 和 abandon(( 方法。检查速览锁行为说明:
函数运行时在 PeekLock 模式下接收一条消息。它调用 如果函数成功完成,则在消息上完成,或者 调用 如果函数失败,则放弃。如果函数运行时间超过 窥视锁超时,只要 函数正在运行。