【问题标题】:Nservicebus alter saga/messages namespaceNservicebus 改变 saga/messages 命名空间
【发布时间】:2016-12-10 04:58:27
【问题描述】:

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

我无法清除现有的工作队列,需要让旧的 saga/消息仍然有效,直到它们全部消失。

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

这里我需要担心什么,可以这样做吗?

【问题讨论】:

  • 你用什么持久化?

标签: nservicebus


【解决方案1】:

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

问题在于 NServiceBus 使用消息类型的完全限定名称来标识它以用于路由目的,因此这是一个复杂的问题,并且您希望第一次就解决这个问题。

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

NSB 文档中有 this 来说明如何处理重大更改,但没有具体针对飞行中的 sagas...

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

  • 将合同更新到新版本。
  • 更新发件人以使用新的合同版本。确保接收者可以看到更改,例如: 删除或重命名时带有警告的过时属性 属性。
  • 更新接收器以处理新的合同版本。确保正确处理新属性,例如而不是依赖 .NET 要设置 int Age = 1 的默认值,最好使用 nullable 类型并将缺失值表示为 null。
  • 当所有发送者和接收者都被更新并且旧格式的传输消息已经被处理后,废弃属性并抛出一个 错误,或者干脆删除它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2011-02-03
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多