gpt4 book ai didi

azure - 如何在自定义异常上对代理消息发送死信

转载 作者:行者123 更新时间:2023-12-03 20:18:40 41 4
gpt4 key购买 nike

如果我遇到自定义异常,我需要将 BrokeredMessage 强制移动到死信队列。这是我使用过的代码:

public static async Task Run([ServiceBusTrigger("myqueue", Connection = "myservicebus:cs")]BrokeredMessage myQueueItem, TraceWriter log)
{
try
{
// process message logic..
}
catch(CustomException ex)
{
//forcefully dead letter if custom exception occurs
await myQueueItem.DeadLetterAsync();
}
}

但是,有时,如果我在代码中显式调用 DeadLetterAsyncAbandonAsync() 等,我会遇到 MessageLockLost, 异常即使锁实际上并没有丢失。任何人都可以建议我,将代理消息移动到死信队列以处理自定义异常的最佳方法是什么。谢谢。

最佳答案

不完全是您想要的,但有创意的解决方法:

将输出服务总线绑定(bind)添加到您的函数。将新消息添加到输出中,以代替死信消息:

public static async Task Run(
[ServiceBusTrigger("myqueue", Connection = "mysb")] BrokeredMessage myQueueItem,
[ServiceBus("mydlq", Connection = "mysb")] IAsyncCollector<BrokeredMessage> dlq,
TraceWriter log)
{
try
{
// process message logic..
}
catch(CustomException ex)
{
// forward to "DLQ" when exception occurs
var dlqMessage = ...; // you need to create a new message here
await dlq.AddAsync(dlqMessage);
}
}

原始消息将成功完成。

请注意,您需要创建一个新的 BrokeredMessage并仔细复制原始消息中的所有数据和元数据。如果您没有元数据,也许最好将收集器的类型更改为简单的类型,例如 IAsyncCollector<string> .

关于azure - 如何在自定义异常上对代理消息发送死信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50220462/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com