我有几个带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.唯一的事情是获取队列描述是一个相对昂贵的操作,所以我建议最初做一次,并缓存每个队列的值.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。