如何在AzureFunction V2上放弃ServiceBus BrokeredMessage级别上的消息或死信?

时间:2018-01-25 02:03:17

标签: azure .net-core azure-functions azure-webjobs azureservicebus

尝试在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发送它时,它表示消息从队列中消失。或不再可用。

如果我走在正确的轨道上,有人能告诉我吗?如果我不是,请引导我走上正确的轨道。

1 个答案:

答案 0 :(得分:0)

Azure函数运行时根据函数调用的成功/失败docs自动完成或放弃

Service Bus消息:

  

函数运行时以PeekLock模式接收消息。如果函数成功完成,它会在消息上调用Complete;如果函数失败,则调用Abandon。

因此,建议的Abandon消息的方法是从函数调用中抛出异常。