【问题标题】:NServiceBus: Access to recoverability in featureNServiceBus:访问功能中的可恢复性
【发布时间】:2021-05-25 18:19:34
【问题描述】:

使用 NServiceBus v7.4.6 和 .NET Core 3.1 并获得异常

给定的键 NServiceBus.RecoverabilitySettings 不在字典中。

尝试在功能中获取RecoverabilitySettings 时使用以下代码。有什么问题?

public class MyFeature : Feature
{
    protected override void Setup(FeatureConfigurationContext context)
    {
        var recoverability = context.Settings.Get<RecoverabilitySettings>();
        recoverability.Failed(settings => settings.OnMessageSentToErrorQueue(message =>
        {
            Console.WriteLine(message.MessageId);
            return Task.CompletedTask;
        }));
    }
}

public static class Program
{
    public static async Task Main()
    {
        var configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .Build();

        var host = Host
            .CreateDefaultBuilder()
            .UseConsoleLifetime()
            .UseNServiceBus(c =>
            {
                var endpointConfiguration = new EndpointConfiguration("MyEndpoint");
                
                var connectionString = configuration.GetConnectionString("AzureServiceBusTransport");
                var transport = endpointConfiguration.UseTransport<AzureServiceBusTransport>();
                transport.ConnectionString(connectionString);
                endpointConfiguration.EnableFeature<MyFeature>();
                
                return endpointConfiguration;
            })
            .Build();

        await host.RunAsync();
    }
}

更新

我尝试将 update the feature 从旧版本的 NServiceBus 7 升级到 ErrorsNotifications.MessageSentToErrorQueue 已过时的最新版本。旧的功能代码是这样的

public class MyOldFeature : Feature
{
    protected override void Setup(FeatureConfigurationContext context)
    {
        var notifications = context.Settings.Get<Notifications>();
        notifications.Errors.MessageSentToErrorQueue += this.OnMessageSentToErrorQueue;
    }

    private void OnMessageSentToErrorQueue(object sender, FailedMessage message)
    {
        Console.WriteLine(message.MessageId);
    }
}

【问题讨论】:

    标签: nservicebus


    【解决方案1】:

    来源:https://docs.particular.net/nservicebus/upgrades/7to8/#error-notification-events

    在 NServiceBus 版本 7.2 中,使用 .NET 事件的 MessageSentToErrorQueue、MessageHasFailedAnImmediateRetryAttempt 和 MessageHasBeenSentToDelayedRetries 的错误通知事件已被弃用,取而代之的是基于任务的回调。在 NServiceBus 8 及以上版本中,基于事件的通知会抛出错误。

    可以通过可恢复性设置使用基于任务的回调设置错误通知:

    设置 API 不是类型安全的,并且行为可能会在主要版本之间发生变化,这会阻止在这种情况下在 RecoverabilitySettings 上过时,因为该类型仍在使用中。

    我创建了以下问题,因为我认为我们可以在有关此特定重大更改的反馈中做得更好:

    https://github.com/Particular/NServiceBus/issues/6080

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      相关资源
      最近更新 更多