尝试在azureFunction中使用ServiceBusTrigger时遇到一个主要的路障问题。我试图在V2 ServiceBusTrigger中放弃或者丢失服务总线消息,我该怎么办?我尝试了以下解决方案,但我没有得到任何结果。 这是我使用的codeSample:
public async static Task Run(Message myQueueItem, TraceWriter log, ExecutionContext context)
{
log.Info($"C# ServiceBus queue trigger function processed message delivery count: {myQueueItem.SystemProperties.DeliveryCount}");
QueueClient queueClient = new QueueClient("[connectionstring]","[queueName]");
////await queueClient.DeadLetterAsync(myQueueItem.SystemProperties.LockToken);
await queueClient.AbandonAsync(myQueueItem.SystemProperties.LockToken);
}
解决方案1:我尝试将消息myQueueItem替换为BrokeredMessage,就像在V1中一样,然后我可以在消息栏上调用myQueueItem.Abandon或deadletter。但它有异常回来:
Microsoft.Azure.WebJobs.Host:异常绑定参数'myQueueItem'。 System.Private.DataContractSerialization:反序列化Microsoft.ServiceBus.Messaging.BrokeredMessage类型的对象时出错。输入源格式不正确。 System.Private.DataContractSerialization:输入源格式不正确。“
至少我可以更进一步。至 解决方案2.解决方案2:使用:
QueueClient queueClient = new QueueClient("[connectionstring]","[queueName]");
////await queueClient.DeadLetterAsync(myQueueItem.SystemProperties.LockToken);
await queueClient.AbandonAsync(myQueueItem.SystemProperties.LockToken);
我可以使用Message Object中提供的锁,但是,当我尝试使用queueClient发送它时,它表示消息从队列中消失。或不再可用。
如果我走在正确的轨道上,有人能告诉我吗?如果我不是,请引导我走上正确的轨道。
答案 0 :(得分:0)
Service Bus消息:
函数运行时以PeekLock模式接收消息。如果函数成功完成,它会在消息上调用Complete;如果函数失败,则调用Abandon。
因此,建议的Abandon
消息的方法是从函数调用中抛出异常。