NServiceBus版本2.5和4之间有哪些不兼容之处

NServiceBus版本2.5和4之间有哪些不兼容之处,nservicebus,Nservicebus,我听到很多人说这两者是不兼容的,但是我没有看到任何关于这些不兼容是什么的清晰细节。具体而言,我想知道: 什么会阻止我直接将现有的2.5端点迁移到最新的4.x版本,而不首先迁移到3.x端点 在创建新的4.x端点时,考虑到它需要与2.5端点进行通信,我是否应该知道什么。新端点将需要使用2.5 messages\events并生成2.5兼容的消息 没有任何东西阻止您直接从V2.x迁移到V4.x,但是,这可能会使迁移过程更加困难。默认支持一个版本的向后兼容性,因此您必须在您的上下文中测试消息版本支持

我听到很多人说这两者是不兼容的,但是我没有看到任何关于这些不兼容是什么的清晰细节。具体而言,我想知道:

  • 什么会阻止我直接将现有的2.5端点迁移到最新的4.x版本,而不首先迁移到3.x端点
  • 在创建新的4.x端点时,考虑到它需要与2.5端点进行通信,我是否应该知道什么。新端点将需要使用2.5 messages\events并生成2.5兼容的消息

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

以下是一些注意事项:

将2.x升级到3.x 注意:您需要分两步执行此操作:第一步:2.6到3.3.8(最新版本3.x)第二步:v3.x到v4.x

将2.x升级到3.x notes

您可能希望在升级过程中转向不引人注目的模式,以减少代码中的耦合。 对于枚举类型,SQL server中saga持久性的格式会发生变化,在V2下,它们按“名称”存储,在V3下,枚举的值(即1,2,3,4)存储在数据库表中。 此处描述了超时迁移: V2中的DI抽象将注入声明为“publicstatic”的属性,但在V3中它不会注入静态属性。如果您有在V2下“工作”的静态属性,那么在V3下它们将为null,直到您将它们设置为非静态。 将2.x链接升级到3.x链接:

将3.x升级到4.x应该是相对简单的。 如果您正在使用nuget

对于每个NServiceBus包,在nuget管理控制台类型中

更新包NServiceBus-vresion 4

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

NServiceBus V4.0要求在同一台计算机上安装最新的RavenDB v2.x

对类型和接口的命名空间更改 非初始化

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

“INeedInitialization”是“NServiceBus.INeedInitialization”和“NServiceBus.Config.INeedInitialization”之间的不明确引用 使用错误和审核队列

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

自动订阅 只有标记为事件(IEEvent或DefiningEventsAs())的消息将自动订阅

默认事务隔离级别

默认事务隔离级别现在是ReadCommitted。要还原为可序列化,请使用以下代码:

Configure.Transactions.Advanced(设置=> 设置.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 交易运输

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

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

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

Messaging.ActiveMQ 消息传递.RabbitMQ 消息传递.SqlServer Messaging.MSMQ 新的配置API

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

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

公共类EndpointConfig:IConfigureHiseEndpoint,AsA_服务器, 使用交通工具 或者在IWantCustomInitialization.Init方法中指定它

公共类EndpointConfig:IConfigureHiseEndpoint,AsA_服务器, IWantCustomInitialization { 公共void Init(){ Configure.With().DefaultBuilder() .UseTransport() } } 新传输的新NuGet包

这些NuGet软件包也可用:

NServiceBus.SqlServer NServiceBus.ActiveMQ NServiceBus.RabbitMQ 如何安装NServiceBus.ActiveMQ包的示例

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

添加对新传输DLL的引用(