可以通过几个问题来描述高可用:

微服务的核心是什么?
核心在于服务治理,也就是注册中心。

如果注册中心出现故障宕机了,应该怎么做?
搭建注册中心集群,并且至少两台以上。

其实Eureka高可用实际上就是把自己作为服务注册到其他注册中心去,这样就可以形成一组相互注册的服务注册中心,实现“你中有我,我中有你”,从而达到高可用效果。

那么这里模拟一下集群,创建两个注册中心服务:eureka-9010、eureka-9020:

eureka9010  yml配置文件:

server:
  port: 9010

spring:
  application:
    name: app-eureka

eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:9020/eureka/

 eureka9020  yml配置文件:

server:
  port: 9020

spring:
  application:
    name: app-eureka

eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:9010/eureka/

这里其实就是做了相互注册的动作,把9010注册到9020,9020注册到9010,但是这里需要注意的是, 做集群的话,服务名称一定要相同。启动9010和9020,效果图:

 

 

然后再创建两个客户端服务进行注册:app-user、app-order

app-user  yml配置文件:

server:
  port: 8010

spring:
  application:
    name: app-user

eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      #这里需要注册到所有的Eureka注册中心
      defaultZone: http://${eureka.instance.hostname}:9010/eureka/,http://${eureka.instance.hostname}:9020/eureka/

app-order  yml配置文件:

server:
  port: 8020

spring:
  application:
    name: app-order

eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      #这里需要注册到所有的Eureka注册中心
      defaultZone: http://${eureka.instance.hostname}:9010/eureka/,http://${eureka.instance.hostname}:9020/eureka/

 启动app-user和app-order服务:

可以看到服务被注册到9020上了,为什么9010上没有?这是因为在注册过程中,注册中心只有一台主机,只有主机才有注册的信息, 其他都是备用机;当主机宕机之后,注册信息就会被转移到备机上。
那现在把9020服务关掉,看下效果:
9020无法访问

注册信息全部都转移到了9010上

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐