电子商务平台源码请加企鹅求求:一零三八七七四六二六。社交电商平台源码请加企鹅求求:一零三八七七四六二六。 什么是Eureka ?spring
Eureka是一种用于服务注册和发现的组件,和zookeeper功能相似。Eureka最开始主要用在亚马逊的云计算平台AWS上。Eureka分为服务注册中心Eureka Server和客户端Eureka Client。bash
为何选择Eureka架构
在springcloud中,能够选择Consul、zookeeper和Eureka做为服务注册和发现的组件,为何选择了Eureka。主要有如下几个缘由app
Eureka是彻底开源的,通过Netflix公司的几年实际使用,功能和性能都很稳定,能够放心使用负载均衡
Eureka是springcloud首选推荐的服务注册与发现组件,和springcloud的其余组件能够很好地对接。Eureka和其余组件例如负载均衡组件Ribbon、熔断器组件Hystrix、熔断器监控组件Hystrix Dashboard组件、熔断器聚合监控Turbine组件,以及网关Zuul组件相互配合,容易实现服务注册、负载均衡、熔断和智能路由。这些组件被整合成springcloud Netflix组件,它是springcloud构建微服务的基础的组件。ide
Eureka的基本架构微服务
主要有三种角色:源码分析
Register Service:服务注册中心,提供服务的注册和发现功能性能
Provider Service:服务提供者ui
Consumer Service:服务消费者
服务消费的基本过程以下:首先须要一个服务注册中心Eureka Server,服务提供者Eureka Client向服务注册中心Eureka Server注册,把本身的信息(例如服务的名称和服务和IP地址)经过REST API提交给服务注册中心Eureka Server。服务消费者Eureka CLient也向服务注册中心注册,同时服务消费者获取一份服务注册列表的信息,这个列表中包含了全部向注册中心注册的服务信息。获取服务注册列表以后,服务消费者就知道服务提供者的IP地址,能够经过Http远程调度来使用服务提供者的服务。
部分源码分析
在eureka-client模块下,com.netflix.discovery包下面,有DiscoveryClient实体类,它包含了一些方法负责eureka client向eurekaserver注册。EurekaClient继承了Lookupservice接口,DiscoveryClient实现了EurekaClient接口,.在DiscoveryClient中有个服务注册的方法,经过HTTP请求向Eureka server注册。
boolean register() throws Throwable {
logger.info(PREFIX + appPathIdentifier + ": registering service...");
EurekaHttpResponse<Void> httpResponse;
try {
httpResponse = eurekaTransport.registrationClient.register(instanceInfo);
} catch (Exception e) {
logger.warn("{} - registration failed {}", PREFIX + appPathIdentifier, e.getMessage(), e);
throw e;
}
if (logger.isInfoEnabled()) {
logger.info("{} - registration status: {}", PREFIX + appPathIdentifier, httpResponse.getStatusCode());
}
return httpResponse.getStatusCode() == 204;
}
复制代码
EurekaServer的功能实如今eureka-core模块中, EurekaBootstrap类在程序启动的时候最早被初始化。在EurekaBootstrap类中,调用PeerAwareInstanceRegistryImpl类,这个类中register()方法,完成服务注册,而且把服务注册后的信息同步到其余Eureka Server上 。
Renew服务续约:
服务注册和服务续约很类似,Eureka Client程序启动以后,服务注册开启,同时开启服务续约的定时任务。Eureka client每隔30秒向eureka Server发送一个心跳,续约服务,若是没有正常续约服务,Eureka Server就认为这个客户端不可用,默认状况下90秒以后,就从Eureka server的服务注册类表中把这个客户端删除。
服务续约功能也是在eureka-core这个模块里面实现的。