[英]Configure downstream API endpoints in microservices
在微服务世界中,配置下游 API 端点的推荐方法是什么?
例如,如果服务 A 需要调用服务 B 中的端点,我们有两种选择:
一个。 使服务 B 的主机名和端口号 API 在服务 A (service-b:8080) 中可配置,并将 append 设置为代码中的路径 URI
或者
湾。 在服务 A (http://service-b:8080/somepath) 中使完整的端点可配置
虽然我喜欢使端点可配置的想法,但它留下了很大的错误空间,因为需要指定整个路径。 当需要从服务 A 调用多个端点到服务 B 时,它也不太适合,这可能具有不同的路径,需要我们配置多个端点。
另一方面,由于上述原因,选项 (a) 似乎更具可扩展性。
大多数在线搜索结果只是演示了一个服务如何调用另一个服务,并使用硬编码的 URL 进行演示。 很高兴知道社区在现实世界的项目中是如何做到这一点的。
PS:我们使用Spring Webflux并部署到k8s。
我看到大多数团队使用选项 a,其中 serviceB“baseUrl”(基本上是 https://serviceb-hostname:8080)在部署期间作为环境属性(kubernetes configmap)注入到应用程序中。
The specific API specific paths are configured in application yaml or in the "proxy config" class itself as constants (eg. ServiceBProxy.java - proxy classes are those which will make rest-calls to the dependent services like service B).
这是来自其中一个微服务(来自我的一个项目)的应用程序 yaml 的一部分:
authorizationService:
baseUri: ${authorizationServiceBaseUri}/api
tenantService:
baseUri: ${tenantServiceBaseUri}/api/v1
tenantsUri: ${tenantService.baseUri}/tenants
settingsService:
baseUri: ${settingsServiceBaseUri}
iamService:
fetchBatchSize: 500
baseUri: ${iamServiceBaseUri}
这里iamServiceBaseUri,settingsServiceBaseUri,tenantServiceBaseUri,authorizationServiceBaseUri的值都是在部署时注入的。 它们中的每一个都包含带有端口的clusterIP。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.