使用nServiceBus和REST API进行API版本控制和长时间运行的进程

时间:2012-08-24 05:04:48

标签: api architecture versioning nservicebus

我们正在构建一个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版本,而无需担心兼容性和社交性。

我个人倾向于后者,但是关于兼容性和升级的挑战并没有被清楚地理解。

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

非常感谢您的时间!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您的版本越频繁,每个版本的队列策略就越不合适,并且向后兼容性变得越来越重要(在结构和行为方面)。