eureka分区实现

背景
当项目是分区部署时,希望一个机房内的服务优先调用同一个机房内的服务,当同一个机房的服务不可用的时候,再去调用其它机房的服务,避免跨区访问
eureka server1配置

spring: application: name: eureka1 server: port: 7101 eureka: instance: prefer-ip-address: true hostname: localhost client: # 是否允许注册到eureka上 register-with-eureka: false # 是否从Eureka Server获取注册的服务信息 fetch-registry: false #如果prefer-same-zone-eureka为false,按照service-url下的list取第一个注册中心来注册,并维持心跳检测,不会再向list内的其他的注册中心注册和维持心跳,只有在第一个注册失败的情 况,才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。 #如果prefer-same-zone-eureka为true,先通过region取availability-zones内的第一个zone,然后通过这个Zone取service-url下的List,并向list内的第一个注册中心注册和维持心跳,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。 prefer-same-zone-eureka: true #地区,名称可自定义 region: myRegion # 区域定义,配置需要按顺序来 availability-zones: myRegion: beijing,shanghai service-url: beijing: http://localhost:7101/eureka/ shanghai: http://localhost:7102/eureka/

eureka server2配置
spring: application: name: eureka2 server: port: 7102 eureka: instance: prefer-ip-address: true hostname: localhost client: # 是否允许注册到eureka上 register-with-eureka: false # 是否从Eureka Server获取注册的服务信息 fetch-registry: false #如果prefer-same-zone-eureka为false,按照service-url下的list取第一个注册中心来注册,并维持心跳检测,不会再向list内的其他的注册中心注册和维持心跳,只有在第一个注册失败的情 况,才会依次向其他注册中心注册,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。 #如果prefer-same-zone-eureka为true,先通过region取availability-zones内的第一个zone,然后通过这个Zone取service-url下的List,并向list内的第一个注册中心注册和维持心跳,总共三次,如果三个service-url都没有注册成功,则注册失败,每隔一个心跳时间会再次尝试。 prefer-same-zone-eureka: true #地区,名称可自定义 region: myRegion # 区域定义,配置需要按顺序来 availability-zones: myRegion: shanghai,beijing service-url: beijing: http://localhost:7101/eureka/ shanghai: http://localhost:7102/eureka/

service1(优先注册上海所在区域)配置
spring: application: name: service server: port: 7111 eureka: instance: prefer-ip-address: true metadata-map: # 定义所属zone zone: shanghai client: register-with-eureka: true fetch-registry: true prefer-same-zone-eureka: true region: myRegion availability-zones: # 注意顺序 myRegion: shanghai,beijing service-url: beijing: http://localhost:7101/eureka/ shanghai: http://localhost:7102/eureka/

service2(优先注册北京所在区域)配置
spring: application: name: service server: port: 7112 eureka: instance: prefer-ip-address: true # 定义所属zone metadata-map: zone: beijing client: register-with-eureka: true fetch-registry: true prefer-same-zone-eureka: true region: myRegion availability-zones: # 注意顺序 myRegion: beijing,shanghai service-url: beijing: http://localhost:7101/eureka/ shanghai: http://localhost:7102/eureka/

consumer(访问上海所在区域)配置
spring: application: name: consumer server: port: 7121 eureka: instance: prefer-ip-address: true # 定义所属zone metadata-map: zone: shanghai client: register-with-eureka: true fetch-registry: true prefer-same-zone-eureka: true region: myRegion availability-zones: # 注意顺序 myRegion: shanghai,beijing service-url: beijing: http://localhost:7101/eureka/ shanghai: http://localhost:7102/eureka/

【eureka分区实现】以上,也可加一个默认的 defaultZone ,当服务不可用时,会从默认注册中心上获取对应服务

    推荐阅读