【发布时间】:2021-08-02 17:54:22
【问题描述】:
我有一个简单的 Python 函数,如果它不匹配少数约束,它应该死信一条消息。实际上我提出了一个异常并且一切正常(我的意思是消息是死信的),但我想了解是否有一种“干净”的方式可以在不引发异常的情况下对消息进行死信。
async def function_handler(message: func.ServiceBusMessage, starter: str):
for msg in [message]:
client = df.DurableOrchestrationClient(starter)
message_body = msg.get_body().decode("utf-8")
msg = json.loads(message_body)
if 'valid' in msg:
instance_id = await client.start_new('orchestrator', None, json.dumps(message_body))
else:
raise Exception(f'not found valid {msg["id"]}')
这是host.json 的一部分,这表明我正在使用 Azure Functions 2.0 版
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[2.*, 3.0.0)"
},
欢迎提出建议
【问题讨论】:
-
您可以将最大传递计数设置为 1,并设置队列属性以在传递计数达到最大值时对邮件进行死信。您还需要将自动完成设置为 false,以便函数运行时不会自动删除消息。这种方法行得通吗?
-
@GauravMantri 感谢您的建议,但问题是如何“将队列上的属性设置为死信”
-
我相信你可以通过 Azure Portal 做到这一点。
-
我的意思是如何死信消息,而不是引发异常。
-
您无需执行任何操作。服务总线会处理它。让我添加我的想法作为答案,您可以尝试一下。
标签: python azure-functions azureservicebus