<!--Eureka 服务注册和发现组件 开始主要用于亚马逊的AWS平台 分为服务注册中心和客户端 --> <!--为什么选择Eureka? 1.他是Netflix公司开源产品,经历生产环境考验,以及3年时间不短迭代,非常稳定 2.他是springcloud首选推荐的服务注册与发现组件,可以和其他组件无缝对接 3.他和其他组件,如负载均衡组件Ribbon,熔断器组件Hystrix,熔断器监控组件Hystrix Dashboard,熔断器聚合监控组件Turbine组件以及网关组件Zuul相互配合 很容易实现服务注册与发现,负载均衡,熔断和智能路由等功能--> <!--Eureka服务过程 首先需要一个服务注册中心Eureka Server,服务提供者Eureka Client向服务注册中心Eureka Server注册,将自己的信息(如服务名和服务的ip地址等)通过Rest API 的形式提交给服务注册中心Eureka Server。同样,服务消费者也可以向服务注册中心Eureka server注册,同时,服务消费者获得一份服务注册列表信息,该列表包含所有 向服务注册中心Eureka server注册服务的信息。获取服务注册列表之后服务消费者就知道服务提供者的ip,就可以通过http调度来消费服务提供者的服务-->
* 1.register 注册服务
* 当Eureka client向Euteka server注册时,会提供自身的元数据,比如 ip 端口 运行状况指标的url,主页地址等信息
*
* 2.Renew 服务续约
* Eureka Client默认情况下会每隔30秒发送一次心跳进行续约,通过服务续约,Eureka server会知道Eureka client可用
* 如果Eureka server90秒没有收到Eureka client的心跳,Eureka server会将Eureka client实例从服务列表中去除。
*
* 3.Fetch Registeries 获取服务注册列表信息
* Eureka client从Eureka server获取注册列表信息,并将其缓存在本地,Euraka client会从服务注册列表中获取其他服务的信息
* ,从而进行远程调用,该信息定时更新(30秒一次),每次返回信息和缓存信息不同,Euraka client会自己处理。如果由于某种
* 原因导致注册列表信息不能完全匹配,client会重新获取注册列表信息。client和server可以使用JSON和XML进行数据通信,默认
* 使用JSON格式获取服务注册列表信息
*
* 4.Cancel 服务下线
* client会向server发送下线请求,发送之后,该实例会从服务注册列表中剔除,该下线请求不会主动完成,需要在程序关闭时调
* 用代码 DiscoveryManager.getInstance().shutdownComponent();
*
* 5.Eviction 服务剔除
* client连续90秒没有向client发送服务续约,即,心跳。服务将被从服务注册列表中剔除。
*
*
* 高可用架构
* Client向server注册,将客户端的信息提交给server,然后client通过心跳来续约服务,如果某个client不能持续续约,大概90
* 秒后将从服务注册列表中去除。服务注册列表和服务注册信息会被复制到集群中每一个Eureka Server节点。同时,来自任何区
* 域的Euruka Client都可以获得整个系统的服务注册列表,根据这些注册列表信息,可以远程调用其他服务来消费
*
*
* 为什么Eureka Client获取服务实例那么慢
* 1.Eureka client注册延迟
* client启动之后并不是立即向server注册的,而是有一个延迟向server注册的时间,默认延迟时间是40秒,源码中解读
* 2.Eureka Server响应缓存
* Server每30秒更新一次响应缓存,可以通过配置来修改。
* 3.Eureka Client的缓存
* Eureka client保留注册表信息缓存,也是30秒更新一次。
* 4.LoadBalancer的缓存
* Ribbon的负载均衡从本利获取服务注册列表信息,Ribbon本身也维护了缓存,避免每一次都需要从client去拿注册列表。此缓
* 存也是30秒刷新一次。
实现步骤
服务端
/**
* 1.添加Eureka Server依赖 spring-cloud-starter-eureka-server
*
* 2.配置注册中心地址
* 注:服务注册中心默认会向自己注册,禁止注册自己 register-with-eureka: false
* fetch-registry: false
*
* 3.配置服务中心注解 @EnableEurekaServer
*
*/
客户端
/**
* 1.添加Eureka Server依赖 spring-cloud-starter-eureka
*
* 2.Euraka Client注册名称
*
* 3.配置服务中心地址 defaultZone: http://localhost:8671/eureka/
*
* 3.配置服务中心注解 @EnableEurekaClient
*
*/