你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
QueueClientOptions.MessageDecodingFailed 事件
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
可选。 执行从队列接收消息或达到峰值但无法解码时所需的任务。
当需要某些QueueMessageEncoding消息,但另一个生成者未按预期方式对消息进行编码时QueueClient,可以接收此类消息或达到峰值。 即队列包含具有不同编码的消息。
QueueMessageDecodingFailedEventArgsQueueClient包含已接收消息以及 ReceivedMessage 原始正文的 或 PeekedMessage ,即不会尝试解码,以便可以检查已从队列接收的正文。
QueueClient不会尝试从队列中删除消息。 因此,此类处理应包含在事件处理程序本身中。
处理程序可能由同步和异步接收和速览 API 调用。 因此,处理程序的实现应与正在使用的 API 保持一 QueueClient 致。 请参阅 SyncAsyncEventHandler<T> 如何正确实现处理程序。 下面的示例演示了一个处理程序,其中包含所有可能的情况。
QueueClientOptions queueClientOptions = new QueueClientOptions()
{
MessageEncoding = QueueMessageEncoding.Base64
};
queueClientOptions.MessageDecodingFailed += async (QueueMessageDecodingFailedEventArgs args) =>
{
if (args.PeekedMessage != null)
{
Console.WriteLine($"Invalid message has been peeked, message id={args.PeekedMessage.MessageId} body={args.PeekedMessage.Body}");
}
else if (args.ReceivedMessage != null)
{
Console.WriteLine($"Invalid message has been received, message id={args.ReceivedMessage.MessageId} body={args.ReceivedMessage.Body}");
if (args.IsRunningSynchronously)
{
args.Queue.DeleteMessage(args.ReceivedMessage.MessageId, args.ReceivedMessage.PopReceipt);
}
else
{
await args.Queue.DeleteMessageAsync(args.ReceivedMessage.MessageId, args.ReceivedMessage.PopReceipt);
}
}
};
QueueClient queueClient = new QueueClient(connectionString, queueName, queueClientOptions);
public event Azure.Core.SyncAsyncEventHandler<Azure.Storage.Queues.QueueMessageDecodingFailedEventArgs> MessageDecodingFailed;
member this.MessageDecodingFailed : Azure.Core.SyncAsyncEventHandler<Azure.Storage.Queues.QueueMessageDecodingFailedEventArgs>
Public Event MessageDecodingFailed As SyncAsyncEventHandler(Of QueueMessageDecodingFailedEventArgs)