SpringCloud服务的注册发现--------Eureka实现高可用

1,Eureka作为注册中心,掌管者服务治理的功能,十分重要,如果注册中心的服务一旦宕机,所有的服务就会挂了,为此,实现注册中心的集群(高可用)就显得十分必要了

2,Eureka 搭建集群

      实现原理就是注册中心的相互注册,实现集群。

      例子:

     

       有两个Eureka服务,分别为eureka和eureka_backup

       eureka的配置文件:8200端口是eureka_backup的端口,将8100的eureka服务注册到eureka_backup注册中心上

###服务端口号
server:
  port: 8100
###eureka 基本信息配置
spring: 
 application: 
  name: eureka-server
eureka:
  instance:
    ###注册到eurekaip地址
    hostname: 127.0.0.1
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8200/eureka/
###因为是集群,注册中心也需要注册到其他的注册中心
    register-with-eureka: true
    fetch-registry: true

     eureka_backup的配置文件:8100端口是eureka_backup的端口,将8200的eureka服务注册到eureka注册中心上

###服务端口号
server:
  port: 8200
###eureka 基本信息配置
spring: 
 application: 
  name: eureka-server
eureka:
  instance:
    ###注册到eurekaip地址
    hostname: 127.0.0.1
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8100/eureka/
###因为是集群,注册中心也需要注册到其他的注册中心
    register-with-eureka: true
    fetch-registry: true

其他的服务:member,order,分别需要注册到这个两个注册中心上

member:

###服务启动端口号
server:
  port: 8000
###服务名称(服务注册到eureka名称)  
spring:
    application:
        name: app-aiyuesheng-member
###服务注册到eureka地址
eureka:
  client:
    service-url:
           defaultZone: http://localhost:8100/eureka,http://localhost:8200/eureka
###需要注册到eureka
    register-with-eureka: true
###是否需要从eureka上获取注册信息
    fetch-registry: true

order:

###服务启动端口号
server:
  port: 8001
###服务名称(服务注册到eureka名称)  
spring:
    application:
        name: app-aiyuesheng-order
###服务注册到eureka地址
eureka:
  client:
    service-url:
           defaultZone: http://localhost:8100/eureka,http://localhost:8200/eureka
###需要注册到eureka
    register-with-eureka: true
###是否需要从eureka上获取注册信息
    fetch-registry: true

配置完毕:

先启动eureka 和 eureka_backup,因为这两个注册中心需要相互注册,当先启动eureka 的时候,eureka_backup 还没有启动,所有eureka 启动会报错,不用管,错误如下:

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
    at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:111) ~[eureka-client-1.8.6.jar:1.8.6]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.8.6.jar:1.8.6]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.8.6.jar:1.8.6]
    at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.8.6.jar:1.8.6]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.8.6.jar:1.8.6]
    at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829) ~[eureka-client-1.8.6.jar:1.8.6]
    at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:104) [eureka-client-1.8.6.jar:1.8.6]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [na:1.8.0_201]
    at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0_201]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) [na:1.8.0_201]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) [na:1.8.0_201]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_201]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_201]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_201]

再启动member,order 服务会注册到注册中心上,因为先启动8100,再启动8200,所以8200 上有8100,8200,8100上只有8200

下面是8100的地址:

如果当8200挂了之后,大约30秒后,注册信息会转移到8100.。。。时间可以配置

 

至此,实现了Eureka集群高可用

posted @ 2019-08-20 13:18  Chris,Cai  阅读(284)  评论(0编辑  收藏  举报