我听过很多人说这两者是不相容的,但是我没有看到任何关于这些不兼容性的明确细节。具体来说,我想知道:
答案 0 :(得分:2)
没有什么可以阻止您直接从V2.x迁移到V4.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
如果您正在使用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查看审核数据。
只有标记为事件的消息(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