0

我们正在构建一个 Web API,并使用 nServiceBus 为所有异步和长时间运行的进程在后台进行消息传递。

问题是当我们推出新版本的 API 时,我们应该使用一组新的队列吗?

就像,对于 API 版本 1,

  • blobstore.v1.inbound
  • blobstore.v1.outbound
  • blobstore.v1.timeout
  • blobstore.v1.audit

对于 API 版本 2,

  • blobstore.v2.inbound
  • blobstore.v2.outbound
  • blobstore.v2.timeout
  • blobstore.v2.audit

或者我们应该努力使用具有多种消息格式和处理程序的同一组队列(假设需求变化和不断发展的消息格式)?

我试图从架构的角度来理解长期的利弊。拥有一组单独的队列可以灵活地单独构建、部署和管理不同的 API 版本,而无需担心兼容性和社交性。

我个人倾向于后者,但围绕兼容性和升级的挑战尚不清楚。

如果您过去处理过类似的情况,请分享您的经验、想法、建议和建议。

非常感谢您的时间!

4

2 回答 2

0

使用不同的队列集还是使用单个队列来支持不同版本的消息之间的决定取决于消息之间差异的程度。在版本控制示例中V2消息是V1消息的纯扩展,可以用接口继承来表示。V1 消息的订阅者可以接收 V2 消息,它们是 V1 消息的适当超集。在这种情况下,保持相同的队列并仅根据需要更新订阅者是有意义的。如果消息完全不同,则部署第二组队列可能更容易。这具有您描述的好处,即隔离。您不必担心会弄乱依赖组件。但是,这将对您的系统产生更大的影响,因为您必须考虑可能依赖于队列的所有内容。可能您必须同时部署多个端点和服务才能完成 V2 的推出。

于 2012-08-28T23:16:50.010 回答
0

您的发布越频繁,每个版本的队列策略就越不合适,并且向后兼容性变得越重要(无论是在结构上还是在行为上)。

于 2012-09-02T09:16:32.507 回答