Skip to content

adapter third discovery

chengyouling edited this page Apr 16, 2024 · 2 revisions

如何适配第三方服务调用且保留服务治理能力

调用第三方服务的时候,一个常见的做法是在Client指定第三方服务ip:port,这种情况下Client不需要服务选择直接完成调用。Spring Cloud Huawei为了实现不同Client服务治理,在Client初始化中增加负载均衡、限流、熔断等治理相关过滤器,导致直接配置ip:port实现的三方调用提示服务不存在而抛异常,为了解决这个问题,引入simple注册发现本地配置,让第三方服务调用在服务发现基础上完成,从而保留服务的治理能力。

常见的第三方服务调用

1、Feign调用第三方服务时,FeignClient 指定 url:

@FeignClient(name = "thirdParty", url = "http://host:port")
public interface FeignService {
  
}

2、基于Spring Boot Admin实现微服务健康监控时,配置admin服务端的url完成微服务向admin注册:

spring:
  boot:
    admin:
      client:
        url: "http://127.0.0.1:8077"

如果是基于Spring Cloud Huawei开发的微服务,都需要关闭Spring Cloud Huawei的治理能力或者Client初始化。

如何基于服务发现实现第三方服务调用

Spring Cloud的服务发现支持多个实现,Spring Cloud Huawei默认包含 simple, servicecombmesh 3个实现。 当存在多个注册发现的时候,会根据 order 进行排序, 优先使用 order 小的注册发现,默认情况下simple优先级最高,如果没找到就找下一个。 默认情况下只有servicecomb工作,使用 servicecomb发现只需要启用注册即可。 每个注册发现都提供了 enabled 属性关闭和开启功能,order来定义他们的优先级。

所以为了保留治理能力,并且将第三方等同对待,可以采用 simple 注册发现。

  • Feign三方调用场景实现服务注册方发现

配置simple 注册发现信息:

spring:
  cloud:
    discovery:
      client:
        simple: 
          enabled: true
          order: 0
          instances:
            thirdParty:                     # 自定义的第三方服务名
              - host: "host"                # 第三方服务端地址
                port: 8080                  # 第三方服务端口
                instanceId: thirdParty01    # 自定义第三方服务实例ID,可以唯一标识的Id

FeignClient不需要指定 URL,配置simple中定义的第三方服务名:

@FeignClient(name = "thirdParty")
public interface FeignService {
  
}
  • 微服务注册Spring Boot Admin三方调用场景实现注册发现

配置simple 注册发现信息:

spring:
  cloud:
    discovery:
      client:
        simple: 
          enabled: true
          order: 0
          instances:
            admin-server:                     # 自定义的第三方服务名
              - uri: "http://127.0.0.1:8077"  # 第三方服务端请求url

配置simple 定义的服务名,实现微服务向admin服务端注册:

spring:
  boot:
    admin:
      client:
        url: "http://admin-server:8077"
Clone this wiki locally