【问题标题】:Configure downstream API endpoints in microservices在微服务中配置下游 API 端点
【发布时间】:2020-10-31 04:02:57
【问题描述】:

在微服务世界中,配置下游 API 端点的推荐方法是什么?

例如,如果服务 A 需要调用服务 B 中的端点,我们有两种选择:

一个。使服务 B 的 API 的主机名和端口号可在服务 A (service-b:8080) 中配置,并在代码中附加路径 URI

b.在服务 A 中配置完整的端点 (http://service-b:8080/somepath)

虽然我喜欢使端点可配置的想法,但它留下了很大的错误空间,因为需要指定整个路径。当需要从服务 A 调用多个端点到服务 B 时,它也不太适合,这可能具有不同的路径,需要我们配置多个端点。

另一方面,由于上述原因,选项 (a) 似乎更具可扩展性。

大多数在线搜索结果只是演示了一个服务如何调用另一个服务,并使用硬编码的 URL 来演示这一点。很高兴知道社区在现实世界的项目中是如何做到这一点的。

P.S:我们使用 Spring Webflux 并部署到 k8s。

【问题讨论】:

    标签: api microservices spring-webflux


    【解决方案1】:

    我看到大多数团队使用选项 a,其中 serviceB“baseUrl”(基本上是 https://serviceb-hostname:8080)在部署期间作为环境属性(kubernetes configmap)注入到应用程序中。

    特定的 API 特定路径在应用程序 yaml 或“代理配置”类本身中配置为常量(例如,ServiceBProxy.java - 代理类是那些将对服务 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。

    【讨论】:

    • 请不要发stackoverflow.com/help/how-to-askDO NOT post images of code, data, error messages, etc. - copy or type the text into the question. Please reserve the use of images for diagrams or demonstrating rendering bugs, things that are impossible to describe accurately via text.中提到的代码图片
    • @ThomasAndolf 感谢您的建议,我更改了答案。
    • 谢谢@AbhinabaChakraborty。这是有道理的,符合我的想法
    猜你喜欢
    • 2018-06-04
    • 2021-01-01
    • 1970-01-01
    • 2022-01-16
    • 2020-03-20
    • 2011-09-19
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    相关资源
    最近更新 更多