跨微服务发送公共 API 版本控制

Posted

技术标签:

【中文标题】跨微服务发送公共 API 版本控制【英文标题】:Send public API versioning across micro service 【发布时间】:2021-01-05 03:08:04 【问题描述】:

我有以下架构

API 网关(REST 公共 API)--> MBus --> 微服务(Windows 服务)。

我在 API Gateway 中实现了基于 URL 的版本控制,这有助于我向后兼容。基于 API 请求,API 网关将请求转换为消息总线并通过主题发送以进行特定服务侦听。现在,在我通过消息总线的微服务中,我应该如何管理 API 的版本控制以实现向后兼容性,我应该从 API 网关通过消息总线发送 API 版本,以便特定服务知道版本并执行请求的特定版本。当微服务通过消息总线而不是基于 REST 时,跨微服务管理 API 版本控制的标准和方法是什么。

问候,

IK

【问题讨论】:

【参考方案1】:

如果您要更改合同,则应使用另一个主题。

基本上你应该管理关于主题的合同。

您应该同时支持这两个主题,直到旧主题没有用户为止。

【讨论】:

嗨酷,使用另一个主题,但微服务在所有版本中保持不变。基于topi,我可以使用不同的参数更改函数调用。这个版本将如何从微服务传播到与其他服务通信的一些提供者或连接器,以便当其他一些服务(如电话)发送事件时,我怎么知道这是针对版本 1,2 等的。当某些第三方服务中发生某些事件时,我还需要对任何类型的事件进行版本控制。 我不确定我是否正确理解了您的情况,但是如果您为每个版本使用不同的主题,则无需在消息中引入任何版本控制。您可以像在 APIGateway 中那样做事。即你的 api 网关中有 /v2/person 和 /v1/person 那么你应该有 TopicPersonv1 和 TopicPersonv2 并且你应该将事件传播给它们。 谢谢酷。你的意思是例如 API Gateway--> Message bus--> PersonService(V1,V2...) 现在当从 API 网关发送请求到 PersonService 请求处理:Person Service 将订阅主题 PersonServiceV1,PersonServiceV2 在启动时带有消息公共汽车。或者其他方法是我们可以让通配符支持的主题,如 PersonService.* 和 Person 服务订阅该主题来处理所有版本。在请求期间 /v1/person API Gateway 将发布数据到 PersonService.V1 并且 Persons 服务将自动从主题中提取 V1。你怎么看? 对于事件处理 API 网关将为事件 PersonService.Events.* 订阅通配符主题,以处理来自所有人员服务版本的事件。因此人员服务将使用 PersonService.Events.V1 和 PersonService.Events.V2 将事件发送到该主题。 API Gateway 将根据消费者使用的版本选择事件并发送给消费者。我们使用 Websocket 向客户端推送实时信息。你认为我在正确的轨道上, 我想确认一件事。由于您将同时拥有 2 个主题,因此您应该填充它们。这意味着如果您同时收听,您将收到两次相同事件的数据。一个来自 TopicV1,另一个来自 TopicV2。你应该小心如何使用它们。我不知道 APIGateway 可以双向工作。当它以一种方式工作时,只是一个主题的制作人,一切都会变得更容易。但是,当您将其设为监听器时,您现在应该使用客户端支持的版本并仅推送该数据,或者在客户端您应该忽略不支持的版本。

以上是关于跨微服务发送公共 API 版本控制的主要内容,如果未能解决你的问题,请参考以下文章

数据库模式更改是不是应该增加语义版本控制中的主要版本?

进行微服务 REST API 版本控制的最佳方法是啥?

服务API版本控制设计与实践

架构思考

服务API版本控制设计与实践

Service Fabric Web API 版本控制问题