需求:存在多个服务A启动端口是8080和B启动端口是9000,访问A调用服务B,需要读取正式环境的配置,但是又不能注册正式环境的服务列表,防止正式调用本地服务。

实现步骤:

1.复制一份配置,比如从bootstrap-pro.yml复制为bootstrap-local.yml,其中不同的是bootstrap-local.yml需要增多一下配置,目的是禁止向nacos注册服务:

spring:
  application:
    name: a
  cloud:
    nacos:
      config:
        #正式环境的nacos地址
        server-addr: 10.10.10.10:8080
        namespace: 5e9aa41a-1618-40c2-b0f3-39dd1982343e
        file-extension: yaml
      #以下配置为差异配置项目
      discovery:
        enabled: false  # 禁用服务注册
        register-enabled: false  # 双重保险

同理其他服务也需要增加以上一个本地配置项,这样本地能启动2个服务。

2.在进行feign跨服务进行服务调用时,需要指定服务地址,因为没有向nacos进行注册,feign调用是无法找到被调用的服务的,修改feign类文件,代码修改如下:

修改前:
@FeignClient(contextId = "test", name = "b",path = "/b/test")
public interface IWarehouseStorageRegionApi {

    @PostMapping
    CommonResult<String> action1(@RequestBody  Param param);

}
修改后:
@FeignClient(contextId = "test", name = "b",path = "/b/test",url = "http://localhost:9000")
public interface IWarehouseStorageRegionApi {

    @PostMapping
    CommonResult<String> action1(@RequestBody  Param param);

}

对比可以看出,增加了:url = "http://localhost:9000",这里就是直接告诉feign调用的服务test在哪里。

通过以上修改就能在不注册到正式服务的情况下,读取了正式配置在本地进行调试了,当然,如果要增加差异化配置,比如日志打印之类的,可以继续在后面追加:

spring:
  application:
    name: a
  cloud:
    nacos:
      config:
        server-addr: 10.10.10.10:8858
        namespace: 5e9aa41a-1618-40c2-b0f3-39dd1982343e
        file-extension: yaml
      #以下配置为差异配置项目
      discovery:
        enabled: false  # 禁用服务注册
        register-enabled: false  # 双重保险

#本地调试需要的差异化配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #本地sql打印

以上处理方法属于对正式环境存在侵入性,如果正式配置不允许本地读取,或者,注册到正式环境其他服务,比如kafka等等,可能会正式读取到本地,导致意想不到的问题。这里只是为了方便短暂调试使用。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐