NServiceBus 版本 2.5 和 4 之间的不兼容性是什么

What are the incompatibilities between NServiceBus versions 2.5 and 4

我听说很多人说这两者不兼容,但我还没有看到关于这些不兼容的任何明确细节。具体我想知道:

没有什么可以阻止您直接从 V2.x 迁移到 V4.x,但是,这可能会使过程变得更加困难。默认支持一种版本向后兼容,因此您必须在您的上下文中测试消息版本支持。

这里有一些注意事项:

正在将 2.x 升级到 3.x

注意:您需要分两步完成:第一步:2.6 到 3.3.8(最新 3.x) 第二步:V 3.x 到 v 4.x

正在将 2.x 升级到 3.x 笔记

您可能希望在升级过程中转向非干扰模式,以减少代码中的耦合。 saga 持久化的格式在 SQL 服务器中更改为枚举类型,在 V2 下它们按“名称”存储,在 V3 下枚举的值(即 1,2,3,4)存储在数据库中 table。 此处描述了超时迁移:http://docs.particular.net/nservicebus/migrating-to-nservicebus-3.0-timeouts V2 中的 DI 抽象将注入一个声明为“public static”的 属性,但在 V3 中它不会注入一个静态 属性。如果你有在 V2 下“工作”的静态属性,它们在 V3 下将是空的,直到你使它们不是静态的。 正在将 2.x 升级到 3.x 链接:

https://github.com/Particular/NServiceBus/releases/tag/3.3.8 http://www.youtube.com/watch?v=LH0qeienRpg http://andreasohlund.net/2012/01/27/convention-over-configuration-in-nservicebus-3-0/ http://andreasohlund.net/2012/03/08/nservicebus-3-0/ Migration patch from NServiceBus 2.6 to NServiceBus 3.0

升级3.x到4.x应该比较简单。

如果您使用的是 nuget

对于每个NServiceBus包,在nuget管理控制台输入

更新包 NServiceBus -vresion 4.

先决条件:NServiceBus V4.0 需要 RavenDB 2.0.0.2261 或更高版本

NServiceBus V4.0 需要在同一台机器上安装最新的 RavenDB v2.x。

名称空间更改为类型和接口

INeedInitialization

在 NServicebus 4.0 之前,接口 INeedInitialization 是在 NServiceBus.Config 中定义的。在 NServicebus 4.0 中,它被定义在更高的命名空间级别,即 NServiceBus。如果您收到以下编译器错误,请删除对 NServiceBus.Config 的使用引用并使用 NServiceBus 解决:错误 CS0104:

'INeedInitialization' 是 'NServiceBus.INeedInitialization' 和 'NServiceBus.Config.INeedInitialization' 之间的模糊引用 使用错误和审计队列

管理服务(现在称为 ServiceConbtrol)(与 NServiceBus V4.0 一起安装)使用来自定义的 MSMQ 错误和审核队列的消息。当管理服务处于 运行ning 时,您可以通过查看 Error.log 队列来查看错误消息,并且可以使用 ServiceInsight 查看审核数据。

自动订阅

只有标记为事件(IEvent 或 DefiningEventsAs())的消息才会被自动订阅。

默认事务隔离级别

默认的事务隔离级别现在是 ReadCommitted。要恢复为可序列化,请使用此代码:

Configure.Transactions.Advanced(设置=> settings.IsolationLevel(IsolationLevel.Serializable)); SecondLevelRetries:SecondLevelRetries 类型(在 NServiceBus.Management.Retries 命名空间中用于配置重试和超时策略)已移至 NServiceBus.Features 命名空间。虽然版本 3.3.x 有一个单独的策略来管理二级重试和超时,但它已被合并到 NServiceBus 4.0 中新的 RetryPolicy 中,并且能够实现这两个功能。

重大更改

PowerShell cmdlet

NServiceBus.Host 不再支持 /installinfrastructure。请改用 PowerShell cmdlet。 PowerShell cmdlet 已重命名,因此它们不会与任何现有 cmdlet 冲突。

NServiceBus.WebService:

使用 NServiceBus.Webservice 将端点公开为 WebService 已在 4.0 中弃用。请改用 WcfService 选项。例如:

你的WcfService:WcfService 交易运输

过去在命名空间 NServiceBus.Unicast.Transport.Transactional 中定义的类型 TransactionalTransport 已重命名为 TransportReceiver 并移至命名空间 NServiceBus.Unicast.Transport。如果您收到以下编译器错误,请使用上面指定的新命名空间解决。

错误 CS0246:找不到类型或命名空间名称 'TransactionalTransport'(是否缺少 using 指令或程序集引用?) 新的传输支持和配置

这些新的传输示例已添加到 NServiceBus 示例中,说明了如何配置新的传输:

Messaging.ActiveMQ Messaging.RabbitMQ Messaging.SqlServer Messaging.MSMQ 新配置 APIs

简化传输配置并使其在所有传输中保持一致。在您的配置文件中,指定一个连接字符串,如下所示:

然后您有两个选项来指定传输:将其指定为 IConfigureThisEndpoint class 声明的一部分,例如:

publicclass端点配置:IConfigureThisEndpoint,AsA_Server, 使用交通工具 或者在IWantCustomInitialization.Init方法中指定,

publicclass端点配置:IConfigureThisEndpoint,AsA_Server, 我要自定义初始化 { public无效初始化(){ Configure.With().DefaultBuilder() .UseTransport() } } 用于新传输的新 NuGet 包

这些 NuGet 包也可用:

NServiceBus.SqlServer NServiceBus.ActiveMQ NServiceBus.RabbitMQ 如何安装 NServiceBus.ActiveMQ 软件包

的示例

PM> 安装包 NServiceBus.ActiveMQ 新传输 DLL

添加对新传输 DLL 的引用(在 Binaries 目录中):

NServiceBus.Transports.RabbitMQ.dll NServiceBus.Transports.SQlServer.dll NServiceBus.Transports.ActiveMQ.dll MSMQ 目前在 NServiceBus.Core.dll 中,不需要任何额外的参考。 NuGet 自动添加引用。

配置更改

XmlMessageSerializer

现在支持不将消息包装在单个消息的元素中。这使得与其他系统的互操作性更容易。要启用此功能:

.XmlSerializer( dontWrapSingleMessages: true ) MsmqTransportConfig

Ms​​mqTransportConfig 部分已被弃用,取而代之的是 TransportConfig 部分,如下所示:

INeedToInstallSomething

INeedToInstallSomething 接口现在通过容器解析。

NHibernate 配置

NHibernate 设置已经简化,如下:

性能计数器

新的吞吐量性能计数器和更新的性能计数器可用:

每台机器安装的 NServiceBus 许可证

现在可以在 HKLM 中安装许可证,允许您为每台服务器安装一个许可证,而不是为每个端点或每个 Windows 帐户安装一个许可证。

LicenseInstaller.exe C:\License.xml Powershell cmdlet 更新

NServiceBus PowerShell cmdlet 已移至 NServiceBus.PowerShell.dll。要导入它,运行 这个:

PM> 导入模块 .\NServiceBus.PowerShell.dll NServiceBus Powershell cmdlet 已重命名,因此它们不会与任何现有 cmdlet 冲突:

安装 NServiceBus 许可证文件。安装 NServiceBusLicense 显示队列中的所有消息。获取 NServiceBusMSMQMessage 显示 NServiceBus 安装的版本。获取 NServiceBusVersion 在机器上安装 DTC。安装 NServiceBusDTC 在机器上安装 RavenDB。安装-NServiceBusRavenDB 在计算机上安装 NServiceBus 性能计数器。安装 NServiceBusPerformanceCounters 在计算机上安装 MSMQ。安装 NServiceBusMSMQ 验证机器上是否安装了 DTC 和 运行ning。测试NServiceBusDTC安装 确保 RavenDB 在机器上。测试NServiceBusRavenDB安装 验证 NServiceBus 性能计数器是否已正确安装在计算机上。测试NServiceBusPerformanceCounters安装 验证 MSMQ 是否正确安装在计算机上。测试NServiceBusMSMQ安装 将所需的配置部分添加到配置文件。添加 NServiceBusMessageForwardingInCaseOfFaultConfig 显示默认的错误和审计队列。获取 NServiceBusLocalMachineSettings 允许指定默认错误和审计队列。一组 NServiceBusLocalMachineSettings NServiceBus.Host 不再支持 /installinfrastructure。请改用 PowerShell cmdlet。 新端点配置 API

示例用法:

Configure.Endpoint.AsSendOnly() .Advanced(设置=> settings.DisableDurableMessages()); Configure.Transactions.Enable() .Advanced(设置=> settings.IsolationLevel(IsolationLevel.Serializable) .DefaultTimeout(TimeSpan.FromSeconds(40)) .DisableDistributedTransactions()); 嵌入式 RavenDB

RavenDB 不再被合并。它是嵌入的,使用 https://github.com/Fody/Costura#readme。嵌入支持客户端更新(但可能需要绑定重定向)。它还允许传递您自己的 DocumentStore,从而提供完整的配置灵活性。审计和错误队列默认值 现在可以在注册表中指定审核和错误队列的服务器默认值(请参阅上面的新 PowerShell cmdlet Get/Set-NServiceBusLocalMachineSettings)。

有关详细信息,请查看发行说明(https://github.com/Particular/NServiceBus/releases/tag/4.0.0)

===============

HTH