问题描述
在开发过程中会遇到一种情况,那就是只需要修改一个服务,但是这个服务依赖了其他的3个服务,导致开发人员在本地也要启动其他的3个服务,还要启动一个Eureka注册中心。问题显而易见,在依赖过多的情况下,本地需要启动很多无须修改的服务。
解决问题
在Eureka中有Region Zone的概念;
Region:可以简单的理解为地理上的分区,比如北京,上海等,没有具体大小的限制,我们可以根据项目的情况,可以自行合理的划分Region;
Zone:可以简单的理解为region内的具体的机房,比如说Region划分为北京,然后北京有两个机房,就可以在此Region之下划分出Zone1,Zone2两个Zone。
在调用的过程中会优先选择相同的Zone发起调用,当找不到相同名称的Zone时会选择其他的Zone进行调用,我们可以利用这个特性来解决本地启动需要启动多个服务的问题。
测试环境有所有的服务部署,需要将测试环境的服务Zone改成同一个,这个可以在appllo上指定。
eureka.instance.metadata-map.zone=test222
本地开发的时候将appllo的环境改成本地开发的模式:
env=Local
然后再修改本地缓存的配置文件,将你需要修改的那个服务的Zone改成自己特有的,只要不跟测试环境一样就行。
eureka.instance.metadata-map.zone=localJh
如果你要修改2个服务,那就改2个,这样当你访问你修改的服务A的时候,这个服务依赖了B,C,D三个服务,B和C本地没有启动,D服务需要修改,在本地启动了。D服务有相同的zone就会优先调用本地的D服务,B和C找不到相同的Zone就会选择其他的Zone进行调用,也就是会调到
测试环境的B和C的服务,这样一来就解决了本地部署多个服务的问题。
测试环境的调用会优先选择测试的Zone进行调用,所以不会影响测试环境,但前提是测试环境的服务都要启动着,不然会调到开发人员注册的服务商,zone特性图下所示: