【问题标题】:NServiceBus UseTransport not working after upgrading to .NET 6NServiceBus UseTransport 在升级到 .NET 6 后不起作用
【发布时间】:2021-11-30 07:49:01
【问题描述】:

我在 Azure Function 项目 (NServiceBus.AzureFunctions.InProcess.ServiceBus) 中使用 NserviceBus。应用程序使用 azure 服务总线作为传输,并使用以下代码在函数启动中进行配置

 var transport = configuration.AdvancedConfiguration.UseTransport<AzureServiceBusTransport>();
            transport.ConnectionString(@"AzureWebJobsServiceBus".GetConfig());

在 .NET Core 3.1 和 Azure 函数版本 3.0 中一切正常。最近我将项目升级到 .NET 6,Function 版本升级到 4.0。升级后functionEndpoint.Process抛出空引用异常。

如果UseTransport代码在函数启动中被注释掉,不会抛出异常,消息处理成功。但是我需要在 NServiceBus 的启动配置中添加 UseTransport 才能自动设置传输拓扑。请帮我解决这个问题。

【问题讨论】:

  • 你在项目中使用的Nuget Package: NServiceBus.Transport.AzureServiceBus是什么版本?
  • @HariKrishnaRajoli-MT 使用最新稳定版本v2.0.2
  • 您使用的NServiceBus 版本是什么?
  • @HariKrishnaRajoli-MT 7.5

标签: azure-functions azureservicebus nservicebus .net-6.0


【解决方案1】:

如果您使用的是 NServiceBus.AzureFunctions.InProcess.ServiceBus 包,则不应调用 UseTransport&lt;&gt;()

该库会为您执行此操作,但它还包含一些额外的代码,以防止传输的消息接收器部分启动。相反,端点只是坐下来等待 Azure Function Trigger 方法之一调用端点 Process 方法之一。

如果你自己调用UseTransport&lt;&gt;(),则启动标准消息接收器,当Azure函数触发器调用Process方法时,拦截代码没有正确配置。这就是您看到空引用异常的原因。

您不应依赖 NServiceBus 端点在传输中创建拓扑。仅当触发第一个 Azure 函数时才会创建终结点。通常,当消息到达时会发生这种情况,但在设置拓扑之前不会发生这种情况。提供了一个 command-line tool 来帮助配置新的 Azure 服务总线环境以与 NServiceBus 一起使用。

【讨论】:

    【解决方案2】:

    当您为您的应用程序使用稳定版本时,例如:

    我建议更改语法并根据连接字符串用例尝试:

    使用 Azure 服务总线作为底层传输: 方法一:

    如果您的连接字符串变量 AzureServiceBusConnectionString 存在于 Web 配置文件中,请尝试使用以下代码调用连接字符串:

    var transport = endpointConfiguration.UseTransport<AzureServiceBusTransport>();
    var connectionString = context.Configuration.GetConnectionString("AzureServiceBusConnectionString"); 
    transport.ConnectionString(connectionString);
    

    方法二:直接给出连接字符串

    var transport = endpointConfiguration.UseTransport<AzureServiceBusTransport>(); transport.ConnectionString("Endpoint=sb://[NAMESPACE].servicebus.windows.net/;SharedAccessKeyName=[KEYNAME];SharedAccessKey=[KEY]");
    

    有关使用配置管理器从 web config 获取连接字符串到应用程序上下文的更多详细信息(方法 1),请查看此Microsoft documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2023-03-16
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 2021-12-26
      相关资源
      最近更新 更多