gpt4 book ai didi

c# - ServiceBus 消息版本控制的最佳实践

转载 作者:太空狗 更新时间:2023-10-30 01:18:30 27 4
gpt4 key购买 nike

我正在建立一个系统,在该系统中我们将在 ServiceBus 主题上的多个内部服务之间传输消息。这些消息将包含序列化的对象。模型对象被定义为相当复杂的类树。这意味着在代码中维护模型结构的双重版本是不切实际的。

我们希望模型结构发生变化,因此我将模型版本公开为代理消息的属性。

当我们需要升级模型版本时,处理转换的最佳方式是什么?

我不认为我们真的需要支持两个并行模型版本。但我担心我们不会在过渡期间丢失信息。我认为首先升级发送服务并让所有订阅者继续处理消息是一个很好的策略。处理完之前版本的所有消息后,就可以升级订阅服务了。

跳过监听服务当前未处理的新版本消息的最佳机制是什么?

  1. 我知道我可以回到老派,通过使用 json 或 xml 的模式来定义并行模型版本,从而使监听服务可以处理并行版本。但这会很麻烦,所以我真的想避免这种情况。

  2. 我注意到 BrokeredMessage 有一个 Defer 方法。那会有用吗?在我意识到消息将从实时队列“移动”到一个单独的状态之前,它看起来很有希望,需要通过按键引用它们来拉取它们。不实用。

  3. 是否可以通过修改投递时间来推迟消息?几分钟就好了。如果到那时同一服务仍在运行,则可以再次推迟。 (一个工作代码示例将不胜感激!)

  4. 我是否需要根据模型版本创建单独的订阅?到目前为止,我们允许不同的消息类型在同一主题上传播,因此需要进行一些重新设计。

最佳答案

根据经验:在实时系统上升级很困难。将系统停机风险降至最低的最简单选择是:

  • 将下一个消息版本支持添加到当前代码库
  • 同时运行两个消息版本
  • 确保所有版本均受支持且系统运行无问题
  • 删除以前的版本

关于c# - ServiceBus 消息版本控制的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167811/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com