美文网首页
spring cloud开发本地调试tips

spring cloud开发本地调试tips

作者: holysu | 来源:发表于2019-04-06 11:58 被阅读0次

    随着微服务化, 服务间的调用也会越来越复杂, 一个服务可能要调用其他多个服务;如 Spring cloud开发的时候要配合测试(或开发环境)环境 eureka注册中心和 config , 但是这时候 不能让其他同事通过这个 eureka 发现到你的本地机器,不然他们调试就gg了; 还有你可能同时负责多个服务,完成产品需求的时候,你得保证你本地启服务A能直接调用到你本地启的服务B,而不是测试环境的那个服务实例

    1. 在本地开发阶段, 如何不能让其他人访问你本机 ?

    1. 将 spring.application.name 加上环境 ${spring.profiles.active} 来将服务名称给区分开
      但是这样的话,就拉取不到测试环境 spring cloud config的配置了, 因为都是通过服务名来匹配的
    2. bootstrap.yml 建一个本地专门的副本 , 如 bootstrap-local.yml 在这里只重写需要改的配置, 不注册到eureka 上, registerWithEureka = false; 这样 别人就不会调用到你的开发机器了 => 需要你启动的时候指定 jvm 参数 -Dspring.profiles.active=local
      image.png

    2. 如果你同时开发相互调用的几个服务,如何本地直接调用 调试?

    image.png

    微服务项目,服务间的调用是比较复杂的, 比如有 A、B、C 三个服务, 其中 A和B都是你自己负责的; 当新需求要同时修改服务 A 和 B 的时候 你就需要在本地调试 A 到 B 的调用,而且你还需要调用部署在测试环境的服务C 但是 Feign 本身是走 ribbon 负载均衡的,而你本地开发的时候 服务又不能注册上去(注册上去的话,别人就有可能调用到你本地机器 出现各种奇怪的问题),注册上去也可能调用到测试服务器的实例

    FeignClient 的属性 name/serviceId 是指定你要调用的服务名, 如果 url 属性值是空 那么就不会走 ribbon 负载均衡的逻辑(从eureka拉取服务实例列表,然后ribbon进行负载均衡选择 机器ip), so~ 我想到的是 加一个配置 ,且 默认值是 “” , 如下: 注意那个 冒号 !!!

    @FeignClient(name = "ServiceA",
            url = "${feign.client.config.serviceA.url:}",
            fallbackFactory = ServiceAFallbackFactory.class)
    public interface ServiceAClient extends ServiceAInterface {}
    

    然后本地开发的时候 调试的时候 指向本地启动的另一个项目

    feign:
      client:
        config:
          serviceA:
            url: http://localhost:8080
    

    ps: xx-local.yml 这种文件可以 gitignore 掉; local 单词也是直接用你自己专属id的~ 如 bootstrap-holysu.yml

    最终的配置

    bootstrap.yml

    bootstrap-local.yml

    所有常规的配置在 bootstrap.yml 中保持不动, 本地调试需要的配置都在 bootstrap-local.yml 中 这样也不用担心调试使用的配置忘记改回去的时候 不小心推到 git 仓库上去,造成测试环境或生产环境部署失败

    这样,就可以防止测试环境调用到你本机,也可以指定某个服务调用到本地另一机器 , 而且也不用担心不小心 设置 FeignClient 的url后 忘记去掉就把代码推到仓库上的尴尬 => 完美啊

    相关文章

      网友评论

          本文标题:spring cloud开发本地调试tips

          本文链接:https://www.haomeiwen.com/subject/xocriqtx.html