# 搭建Eureka
## 分区
对于一个用户量比较大或者地理位置分布范围很广的项目。跨地区调用时,延时比较大。我们可以通过同一个机房的服务优先调用同一个机房的服务,当本机房的服务不可用的时候,才会调用其他机房的服务。
### Eureka中的分区概念
eureka提供了region和zone两个概念。
* region: 地区。比如亚洲地区,欧洲地区。
* zone: region内的某个机房。
## 我的使用案例
几个同事一起开发一个项目,服务数量比较多,本机开发,启动所有服务,机器会比较卡。我就考虑大家集中注册到一个eureka中,但是这样服务就会互相干扰。但是分区这种配置正好符合我的场景。
我们使用调试服务的时候,就在自己的机器上启动对应服务,进行调试,这样会调用自己的服务。
而调用正常的服务的时候,只要有一个人启动服务,就可以了。我们其他人就也可以调用了。
## 搭建实例代码
* application-peer0.yml
spring:application:# 指定应用的名称name: fxb-eureka-supermanserver:port: ${eureka_port:8760}eureka:instance:hostname: fxb-eureka-peer0# 更趋向IP地址prefer-ip-address: truesecure-virtual-host-name: fxb.comvirtual-host-name: moyang.commetadata-map:zone: supermanclient:service-url:wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eurekalipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eurekafengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eurekawangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eurekasuperman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka# eureka client 刷新本地刷新时间,默认30sregistry-fetch-interval-seconds: 5register-with-eureka: truefetch-registry: true# 更趋向同一zone的eurekaprefer-same-zone-eureka: trueregion: beijingavailability-zones:beijing: wangxiyue,superman,lipu_f,fengtiecheng,wangxiaowei_devserver:# eureka server 刷新read cache Map 的时间# 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒response-cache-update-interval-ms: 30000#eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。#由于启用了evict其实就用不太上改这个配置了#默认180sresponse-cache-auto-expiration-in-seconds: 180# 启动主动失效,并且每次主动失效检测时间间隔为3seviction-interval-timer-in-ms: 3000management:endpoints:web:exposure:include: "*"endpoint:health:show-details: alwayslogging:level:root: INFO
* application-peer1.yml
spring:application:# 指定应用的名称name: fxb-eureka-wangxiyueserver:port: ${eureka_port:8761}eureka:instance:hostname: fxb-eureka-peer1# 更趋向IP地址pefer-ip-address: true# status-page-url-path: /actuator/info# health-check-url-path: /actuator/healthsecure-virtual-host-name: fxb.comvirtual-host-name: moyang.commetadata-map:zone: wangxiyueclient:service-url:superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eurekawangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eurekalipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eurekafengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eurekawangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka# eureka client 刷新本地刷新时间,默认30sregistry-fetch-interval-seconds: 5register-with-eureka: truefetch-registry: true# 更趋向同一zone的eurekaprefer-same-zone-eureka: trueregion: beijingavailability-zones:beijing: superman,wangxiyue,lipu_f,fengtiecheng,wangxiaowei_devserver:# eureka server 刷新read cache Map 的时间# 意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒response-cache-update-interval-ms: 30000#eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。#由于启用了evict其实就用不太上改这个配置了#默认180sresponse-cache-auto-expiration-in-seconds: 180# 启动主动失效,并且每次主动失效检测时间间隔为3seviction-interval-timer-in-ms: 3000management:endpoints:web:exposure:include: "*"endpoint:health:show-details: alwayslogging:level:root: INFO
* application-peer2.yml
spring:application:# 指定应用的名称name: fxb-eureka-lipu_fserver:port: ${eureka_port:8762}eureka:instance:hostname: fxb-eureka-peer2# 更趋向IP地址prefer-ip-address: true# status-page-url-path: actuator/info# health-check-url-path: actuator/healthsecure-virtual-host-name: fxb.comvirtual-host-name: moyang.commetadata-map:zone: lipu_fclient:service-url:superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eurekawangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eurekalipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eurekafengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eurekawangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka# eureka client 刷新本地刷新时间,默认30sregistry-fetch-interval-seconds: 5register-with-eureka: truefetch-registry: true# 更趋向同一zone的eurekaprefer-same-zone-eureka: trueregion: beijingavailability-zones:beijing: wangxiyue,superman,lipu_f,fengtiecheng,wangxiaowei_devserver:# eureka server 刷新read cache Map 的时间# 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒response-cache-update-interval-ms: 30000#eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。#由于启用了evict其实就用不太上改这个配置了#默认180sresponse-cache-auto-expiration-in-seconds: 180# 启动主动失效,并且每次主动失效检测时间间隔为3seviction-interval-timer-in-ms: 3000management:endpoints:web:exposure:include: "*"endpoint:health:show-details: alwayslogging:level:root: INFO
application-peer3.yml
spring:application:# 指定应用的名称name: fxb-eureka-fengtiechengserver:port: ${eureka_port:8763}eureka:instance:hostname: fxb-eureka-peer3# 更趋向IP地址prefer-ip-address: true# status-page-url-path: actuator/info# health-check-url-path: actuator/healthsecure-virtual-host-name: fxb.comvirtual-host-name: moyang.commetadata-map:zone: fengtiechengclient:service-url:superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eurekawangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eurekalipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eurekafengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eurekawangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka# eureka client 刷新本地刷新时间,默认30sregistry-fetch-interval-seconds: 5register-with-eureka: truefetch-registry: true# 更趋向同一zone的eurekaprefer-same-zone-eureka: trueregion: beijingavailability-zones:beijing: lipu_f,superman,wangxiyue,fengtiecheng,wangxiaowei_devserver:# eureka server 刷新read cache Map 的时间# 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒response-cache-update-interval-ms: 30000#eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。#由于启用了evict其实就用不太上改这个配置了#默认180sresponse-cache-auto-expiration-in-seconds: 180# 启动主动失效,并且每次主动失效检测时间间隔为3seviction-interval-timer-in-ms: 3000management:endpoints:web:exposure:include: "*"endpoint:health:show-details: alwayslogging:level:root: INFO
* application-peer4.yml
spring:application:# 指定应用的名称name: fxb-eureka-wangxiaowei_devserver:port: ${eureka_port:8764}eureka:instance:hostname: fxb-eureka-peer4# 更趋向IP地址prefer-ip-address: truesecure-virtual-host-name: fxb.comvirtual-host-name: moyang.commetadata-map:zone: wangxiaowei_devclient:service-url:superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eurekawangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eurekalipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eurekafengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eurekawangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka# eureka client 刷新本地刷新时间,默认30sregistry-fetch-interval-seconds: 5register-with-eureka: truefetch-registry: true# 更趋向同一zone的eurekaprefer-same-zone-eureka: trueregion: beijingavailability-zones:beijing: fengtiecheng,superman,wangxiyue,lipu_f,wangxiaowei_devserver:# eureka server 刷新read cache Map 的时间# 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒response-cache-update-interval-ms: 30000#eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。#由于启用了evict其实就用不太上改这个配置了#默认180sresponse-cache-auto-expiration-in-seconds: 180# 启动主动失效,并且每次主动失效检测时间间隔为3seviction-interval-timer-in-ms: 3000management:endpoints:web:exposure:include: "*"endpoint:health:show-details: alwayslogging:level:root: INFO
### 注册逻辑
* `prefer-same-zone-eureka`为`false`, 按照`service-url`的`list`第一个注册中心,并和其维持心跳检测.不会再向`list`中的其他注册中心注册和维持心跳. 只有在第一个注册失败的情况下,才会依次向其他注册中心注册。总共会注册三次,如果三次都没有成功,就会注册失败。每隔一个心跳时间,就会再次尝试了。
* 如果`prefer-same-zone-eureka`为`true`,先通过`region`取`availability-zones`内的第一个`zone`,然后通过这个`zone`取`service-url`下的`list`,并向`list`内的第一个注册中心进行注册和维持心跳,不会再向list内的其它的注册中心注册和维持心跳。只有在第一个注册失败的情况下,才会依次向其它的注册中心注册,总共重试`3`次,如果`3`个`service-url`都没有注册成功,则注册失败。每隔一个心跳时间,会再次尝试。
### 注意
为了保证服务注册到同一个zone的注册中心,一定要注意availability-zones的顺序,必须要把同一个zone写在前面。

如果觉得在这里看着不方便,那就查看原文啊。




