![](/img/trans.png)
[英]Azure Function - c# - ServicebusTrigger with Blob binding
[英]Azure Function Python - serviceBusTrigger - How to deadletter a message
我有一個簡單的 Python function 如果它不匹配一些約束,它應該死信一條消息。 實際上我提出了一個異常並且一切正常(我的意思是消息是死信的),但我想了解是否有一種“干凈”的方式來死信消息而不引發異常。
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 功能的 2.0 版
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[2.*, 3.0.0)"
},
歡迎提出建議
在撰寫本文時,在 Python 中,無法以交互方式發送死信消息。
我發現autocomplete=false 僅支持 C# 。
這基本上意味着死信消息的唯一方法是引發異常,就像我在代碼中所做的那樣。
感謝@GauravMantri 為我指出正確的方法(即看看如何使用自動完成配置參數)。
Azure 服務總線隊列具有您可以使用的Max Delivery Count
屬性。 考慮到您只想只處理一次消息,然后在 Function 無法處理的情況下對消息進行死信,您可以將最大傳遞計數設置為 1。這樣,在第一次傳遞后,消息將自動死信。
默認情況下,如果在處理消息時沒有異常,Function 運行時會嘗試自動完成消息。 您不希望 Function 運行時執行此操作。 為此,您需要將auto complete
設置設置為 false。 但是,如果消息處理成功,您會想要刪除該消息,因此如果消息處理成功,您將需要手動調用自動完成。
就像是:
if 'valid' in msg:
instance_id = await client.start_new('orchestrator', None, json.dumps(message_body))
//auto complete the message here...
else:
//do nothing and the message will be dead-lettered
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.