1
Eureka较zookeeper和consul比较,他具备以下特点
1,AP(最终一致性),采用的是HTTP 定时轮训方式。主要是保证高可用。
2,适用规模:2000多个 实例(节点)。
2
Neflix Eureka高可用
客户端高可用

高可用注册中心集群
单机模拟多台Eureka服务器
1,在工程里面添加多份配置文件

application-pro1.properties:
spring.application.name=eureka-server
server.port=9090
##取消服务器自我注册上报的功能
eureka.client.register-with-eureka=false
##不需要检索服务
eureka.client.fetch-register=false
##eureka server 服务的Url 用于客户端注册
eureka.client.serviceUrl.defaultZone=\
http://localhost:${server.port}/eureka
application-pro2.properties:
spring.application.name=eureka-server
server.port=9091
##取消服务器自我注册上报的功能
eureka.client.register-with-eureka=false
##不需要检索服务
eureka.client.fetch-register=false
##eureka server 服务的Url 用于客户端注册
eureka.client.serviceUrl.defaultZone=\
http://localhost:${server.port}/eureka2,使用Program arg的方式配置--spring.profiles.active=pro2和--spring.profiles.active=pro1先后激活这两台服务。

3,在浏览器中输入地址http://localhost:9090/,http://localhost:9091/ ,即可访问这两台服务
客户端配置
1,在客户端的配置文件中添加如下配置:
eureka.client.serviceUrl.defaultZone=\
http://localhost:9091/eureka,http://localhost:9090/eureka2,先后启动我们的服务提供者(多台)和消费者
这里有个小技巧:可以配置服务提供者的随机端口的范围,这样就不需要重复的去修改配置。
即在配置文件中添加server.port=${random.int[7070,7079]}即可。3,再次在浏览器中输入地址http://localhost:9090/,http://localhost:9091/ 访问这两台服务。我们可以看到如图所示内容,其中一台服务没有注册任何实例?这是因为:如果 Eureka 客户端应用配置多个 Eureka 注册服务器,那么默认情况只有第一台可用的服务器,存在注册信息。如果 第一台可用的 Eureka 服务器 Down 掉了,那么 Eureka 客户端应用将会选择下一台可用的 Eureka 服务器。


其他的重要配置
获取注册信息时间间隔
Eureka 客户端需要获取 Eureka 服务器注册信息,这个方便服务调用。Eureka 客户端:EurekaClient,关联应用集合:Applications单个应用信息:Application,关联多个应用实例。单个应用实例:InstanceInfo 。当 Eureka 客户端需要调用具体某个服务时,比如消费者调用服务提供者,服务提供者实际对应对象是Application,关联了许多应用实例(InstanceInfo)。见源码:


如果应用服务提供者的应用实例发生变化时,那么服务消费者是需要感知的(拉的模式)。比如:服务提供者机器从10 台降到了5台,那么,作为调用方的服务消费者需要知道这个变化情况。可是这个变化过程,可能存在一定的延迟,可以通过调整注册信息时间间隔来减少错误。具体的配置项如下:
## 调整注册信息的获取周期,默认值:30秒
eureka.client.registryFetchIntervalSeconds = 5实例信息复制时间间隔
具体就是客户端信息的上报到 Eureka 服务器时间。当 Eureka 客户端应用上报的频率越频繁(推的模式),那么 Eureka 服务器的应用状态管理一致性就越高。具体配置项如下:
## 调整客户端应用状态信息上报的周期
eureka.client.instanceInfoReplicationIntervalSeconds = 5实例Id
从 Eureka Server Dashboard 里面可以看到具体某个应用中的实例信息,如lqdachjj:eureka-server:9090,这里我们可以自定义,在配置文件中添加:eureka.instance.instanceId=${spring.application.name}:${server.port},修改后效果如图:

源码如图所示。这里其实设计的不合理,根据应用的实例注册,导致我们在Eureka Server Dashboard里头同一个服务有多个名称展示出来。


实例端点映射
我们在Eureka Server Dashboard 点击跳转默认配置是/info,可以修改配置项如下,调整请求的地址。
## Eureka 客户端应用实例状态 URL
eureka.instance.statusPageUrlPath = /health可以在EurekaInstanceConfigBean类中找到具体的设计(private String statusPageUrlPath = "/info")
服务端高可用

1,修改上面的注册服务器的配置信息
application-pro1.properties:
spring.application.name=eureka-server
server.port=9090
##取消服务器自我注册上报的功能
eureka.client.register-with-eureka=true
##不需要检索服务
eureka.client.fetch-register=true
##eureka server 服务的Url 用于客户端注册
eureka.client.serviceUrl.defaultZone=\
http://localhost:9091/eureka
application-pro2.properties:
spring.application.name=eureka-server
server.port=9091
##取消服务器自我注册上报的功能
eureka.client.register-with-eureka=true
##不需要检索服务
eureka.client.fetch-register=true
##eureka server 服务的Url 用于客户端注册
eureka.client.serviceUrl.defaultZone=\
http://localhost:9090/eureka2,按上面的方式启动服务,在浏览器中访问,如图所示,发现注册的服务不再只有一台服务上有信息了,且两台服务互为副本。






