NServiceBus UseTransport 在升级到 .NET 6 后不起作用
Posted
技术标签:
【中文标题】NServiceBus UseTransport 在升级到 .NET 6 后不起作用【英文标题】:NServiceBus UseTransport not working after upgrading to .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
【参考方案1】:
如果您使用的是 NServiceBus.AzureFunctions.InProcess.ServiceBus 包,则不应调用 UseTransport<>()
。
该库会为您执行此操作,但它还包含一些额外的代码,以防止传输的消息接收器部分启动。相反,端点只是坐下来等待 Azure Function Trigger 方法之一调用端点 Process 方法之一。
如果你自己调用UseTransport<>()
,则启动标准消息接收器,当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。
【讨论】:
以上是关于NServiceBus UseTransport 在升级到 .NET 6 后不起作用的主要内容,如果未能解决你的问题,请参考以下文章
NServiceBus 与 Windows ServiceBus