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

时间:2015-01-12 22:11:17

标签: nservicebus

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

  • 什么会阻止我直接将现有的2.5端点迁移到最新的4.x版本而不先移动到3.x端点。
  • 在创建新的4.x端点时,我是否应该注意任何事情,因为它需要与2.5端点进行通信。新端点将需要消耗2.5个消息\事件并生成2.5个兼容消息

1 个答案:

答案 0 :(得分:2)

没有什么可以阻止您直接从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笔记

您可能希望在升级过程中转向不显眼的模式,以减少代码中的耦合。 对于枚举类型,传统持久性的格式在SQL服务器中发生变化,在V2下它们由“name”存储,在V3下,枚举的值(即1,2,3,4)存储在数据库表中。 此处描述了超时迁移: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管理控制台中输入

update-package 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错误和审核队列的消息。管理服务正在运行时,您可以通过查看Error.log队列来查看错误消息,并且可以使用ServiceInsight查看审核数据。

Autosubscriptions

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

默认事务隔离级别

默认事务隔离级别现在是ReadCommitted。要恢复为Serializable,请使用以下代码:

Configure.Transactions.Advanced(settings =>    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选项。例如:

YourWcfService:WcfService TransactionalTransport

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

错误CS0246:类型或命名空间名称' TransactionalTransport'找不到(你错过了使用指令或程序集引用吗?) 新的传输支持和配置

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

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

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

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

公共类EndpointConfig:IConfigureThisEndpoint,AsA_Server,        UsingTransport 或者在IWantCustomInitialization.Init方法中指定它,

公共类EndpointConfig:IConfigureThisEndpoint,AsA_Server, IWantCustomInitialization {    public void Init(){       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

已弃用MsmqTransportConfig部分,转而使用TransportConfig部分,如下所示:

INeedToInstallSomething

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

NHibernate配置

NHibernate设置已经简化,如下所示:

性能计数器

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

每台机器安装NServiceBus许可证

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

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

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

PM> Import-Module。\ NServiceBus.PowerShell.dll NServiceBus Powershell cmdlet已重命名,因此它们不会与任何现有cmdlet冲突:

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

样本用法:

Configure.Endpoint.AsSendOnly()    .Advanced(settings => settings.DisableDurableMessages()); Configure.Transactions.Enable()    .Advanced(settings => 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