我有几个带ServiceBus触发器的WebJobs,我有一个自定义
MessageProcessor来完成消息处理后的一些处理.
我希望能够做一些不同的事情(具体来说,记录一个错误而不是一个警告)如果消息是在它的最后一次重试,即它即将被发送到deadletter队列.发送到CompleteProcessingMessageAsync函数的BrokeredMessage具有DeliveryCount,但我看不到返回原始队列以查找MaxDeliveryCount的方法.有任何想法吗?不同的队列具有不同的MaxDeliveryCounts,因此设置常量不是一个真正的选择.我能想到的唯一另一件事是为每个队列的死信队列创建一个单独的工作,但我希望能够在WebJob级别而不是每个单独的工作中完成.
public class CustomMessageProcessor : MessageProcessor
{
public CustomMessageProcessor(OnMessageOptions messageOptions) : base(messageOptions)
{
}
public override async Task CompleteProcessingMessageAsync(BrokeredMessage message, FunctionResult result, CancellationToken cancellationToken)
{
if (result.Succeeded)
{
if (!MessageOptions.AutoComplete)
{
cancellationToken.ThrowIfCancellationRequested();
await message.CompleteAsync();
}
}
else
{
cancellationToken.ThrowIfCancellationRequested();
//some other processing
//If message.DeliveryCount < maxDeliveryCount
// log warning
//else
// log error
await message.AbandonAsync();
}
}
}
最佳答案 您应该能够从父队列获取Microsoft.ServiceBus.Messaging.QueueDescription,然后使用MaxDeliveryCount.唯一的事情是获取队列描述是一个相对昂贵的操作,所以我建议最初做一次,并缓存每个队列的值.