@2019.04.06
随着微服务化, 服务间的调用也会越来越复杂, 一个服务可能要调用其他多个服务;如 Spring cloud开发的时候要配合测试(或开发环境)环境 eureka注册中心和 config , 但是这时候 不能让其他同事通过这个 eureka 发现到你的本地机器,不然他们调试就gg了; 还有你可能同时负责多个服务,完成产品需求的时候,你得保证你本地启服务A能直接调用到你本地启的服务B,而不是测试环境的那个服务实例
${spring.profiles.active}
来将服务名称给区分开-Dspring.profiles.active=local
微服务项目,服务间的调用是比较复杂的, 比如有 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后 忘记去掉就把代码推到仓库上的尴尬 => 完美啊
原文:https://www.cnblogs.com/mushishi/p/14530266.html