Nservicebus改变了saga / messages名称空间

时间:2016-12-09 06:02:44

标签: nservicebus

我想重构一些我的传奇和消息,并将它们移动到一个新的命名空间。

我无法清除现有的工作队列,并且需要让旧的传奇/消息在它们全部消失之前仍然有效。

我不会改变传奇/消息的任何行为只是命名空间,有一种简单的方法来批量更新这些,以便旧的传奇/消息可以继续正确处理。

我需要担心的是,有可能这样做吗?

1 个答案:

答案 0 :(得分:0)

我不确定是否有任何方法可以全面更新所有正在进行的传奇实例。我想你可能能够使用一些Raven-fu(或SQL,如果你正在使用它)。

问题是NServiceBus使用消息类型的完全限定名称来识别它以用于路由目的,因此这是一个复杂的问题,并且您希望第一次就能获得正确的信息。

实际上,您正在谈论的是在您的架构中引入大量新消息。并行引入更改可能更安全,允许所有正在运行的saga实例完成,然后停用过时的 - 现在未使用的 - 位。

NSB文档有this关于处理重大变化的说法,但没有特别针对飞行中的传奇......

  

当消息类型发生重大更改时,例如添加   或删除属性,更改属性类型等升级   过程应包括以下步骤:

     
      
  • 将合约更新为新版本。
  •   
  • 更新发件人以使用新合约版本。确保接收器可以看到更改,例如:使用装饰现有属性   删除或重命名时带有警告的过时属性   属性。
  •   
  • 更新接收器以处理新合约版本。确保正确处理新属性,例如而不是依赖于.NET   要设置int Age = 1的默认值,最好使用nullable   类型并将缺失值表示为null。
  •   
  • 当更新所有发件人和收件人并处理旧格式的正在进行的邮件时,请废弃这些属性并抛出   错误,或者只是删除它们。
  •