我正在建立一个系统,在该系统中,我们将在ServiceBus主题之间传输多个内部服务之间的消息。这些消息将包含序列化对象。模型对象被定义为相当复杂的类树。这意味着在代码中维护模型结构的重复版本不是实际可行的。
我们预计模型结构会发生变化,因此我已经将模型版本作为一个属性暴露在代理消息上。
在需要升级模型版本时,最佳的处理方式是什么?
我认为我们不需要支持两个并行的模型版本。但我担心在过渡期间不会丢失消息。我假设最好的策略是先升级发送服务,并让所有订阅者继续处理消息。当所有旧版本的消息都被处理完毕后,就可以升级订阅服务了。
跳过具有当前监听服务无法处理的新版本的消息的最佳机制是什么?
我知道我可以回到老学派,通过使用json或xml模式来定义并行的模型版本,从而使监听服务能够处理并行版本。但这很麻烦,所以我真的想避免这种情况。
我注意到BrokeredMessage有一个Defer方法。这会有用吗?它看起来很有前途,直到我意识到消息将从活动队列移动到一个单独的状态,在那里需要通过引用它们的键来拉取它们。这不是实际可行的。
通过修改传送时间来推迟消息是否可能?几分钟是可以接受的。如果同一服务仍然运行,它可以再次被推迟。(如果您能提供一个有效的代码示例,那会很棒!)
我需要基于模型版本创建单独的订阅吗?到目前为止,我们允许不同类型的消息在同一个主题上流转,因此这需要进行一些重新设计。