NServiceBus Feature中获取RecoverabilitySettings报字典无对应键如何解决
异常原因
- 报错的根本原因是
RecoverabilitySettings是NServiceBus v8版本才新增的配置类,你当前使用的v7.4.6版本的配置字典中根本没有这个键,自然会抛出找不到对应键的异常。 - 你参照v7升v8的API调整方案修改代码,但没有同步升级NServiceBus的框架版本,是问题的核心诱因。另外v7版本中
ErrorsNotifications.MessageSentToErrorQueue只是标记了过时,仍可正常运行,该API会在v8版本才被正式移除。
解决方案
你可以根据自己的版本计划选择以下两种处理方案:
方案1:继续使用NServiceBus v7.4.6
直接沿用原有旧版实现即可,不需要调整代码,过时警告不影响功能运行:
public class MyOldFeature : Feature { protected override void Setup(FeatureConfigurationContext context) { // 可添加下面的注释消去过时警告 // #pragma warning disable CS0618 var notifications = context.Settings.Get<Notifications>(); notifications.Errors.MessageSentToErrorQueue += this.OnMessageSentToErrorQueue; // #pragma warning restore CS0618 } private void OnMessageSentToErrorQueue(object sender, FailedMessage message) { Console.WriteLine(message.MessageId); } }
方案2:升级到NServiceBus v8+使用新API
如果要使用新的RecoverabilitySettings相关API,需要先完成两个前置升级:
- 把项目的运行时从.NET Core 3.1升级到.NET 6或更高版本(NServiceBus v8最低要求.NET 6)
- 把所有NServiceBus相关NuGet包(包括NServiceBus核心包、AzureServiceBusTransport传输包等)全部升级到v8或以上匹配版本
完成升级后,你现有的新Feature代码就可以正常运行,不会再抛出找不到键的异常。
内容的提问来源于stack exchange,提问作者Petr Felzmann
相关产品推荐
相关产品推荐

