Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是springcloud体系中最重要最核心的组件之一。(了解源码可+求求: 1791743380)java
管理各类服务功能包括服务的注册、发现、熔断、负载、降级等,好比dubbo admin后台的各类功能。spring
有了注册中心,调用关系的变化,画几个简图来看一下。apache
服务A调用服务B缓存
[springboot
](https://springcloud-oss.oss-c...服务器
有了注册中心以后,任何一个服务都不在是直连的,都须要经过注册中心去调用。网络
[架构
](https://springcloud-oss.oss-c...app
若是是一个连续调用:负载均衡
服务A调用服务B,服务B调用服务C
[
](https://springcloud-oss.oss-c...
这里若是加上注册中心,整个调用流程就会分为两步,服务A先从注册中心请求服务B,服务B再从注册中心请求服务C
[
](https://springcloud-oss.oss-c...
上面的示例只是描述了两三个服务之间的互相调用,可能加上注册中心还会稍显繁琐,若是一条调用链上面有几十个服务(这个丝绝不是开玩笑哦,正常的业务流程中极可能出现这种复杂的调用过程),在工做中我就遇到过超过20个服务的互相调用,这种复杂业务场景的互相调用,若是不使用注册中心,画出来的图会连成一个网状结构,单从图上面已经很难找出服务的上下游关系了。其中若是一个服务有改动,就会牵扯到上下游多台机器的重启,整个架构设计彻底耦合在一块儿,每次改动所须要的工做量彻底超出想象。经过注册中心去注册服务,彻底不在须要关心上下游机器的ip地址,由几台服务器组成,是否重启才会生效,注册中心已经帮咱们把服务的注册和发现作好了,咱们只须要知道注册中心在哪里,对应的服务名是什么就ok啦~~
因为各类服务都注册到了服务中心,就有了去作不少高级功能条件。好比几台服务提供相同服务来作均衡负载;监控服务器调用成功率来作熔断,移除服务列表中的故障点;监控服务调用时间来对不一样的服务器设置不一样的权重等等。
在说Eureka以前咱们先了解一下Netflix这家公司:
如下介绍来自于百度百科:
Netflix(Nasdaq NFLX) 成立于1997年,是一家在线影片租赁提供商,主要提供Netflix超大数量的DVD并免费递送,总部位于美国加利福尼亚州洛斯盖图。Netflix已经连续五次被评为顾客最满意的网站。能够经过PC、TV及iPad、iPhone收看电影、电视节目,可经过Wii,Xbox360,PS3等设备链接TV。Netflix大奖赛从2006年10月份开始,Netflix公开了大约1亿个1-5的匿名影片评级,数据集仅包含了影片名称。评价星级和评级日期,没有任何文本评价的内容。比赛要求参赛者预测Netflix的客户分别喜欢什么影片,要把预测的效率提升10%以上。
总而言之,这是一家全球最大的(可能要排除国内的,具体不清楚)流媒体公司,最开始见这个单子是在各类美剧或者电影的开头,顺手百度了一下,Netflix拍摄的表明性的美剧有《纸牌屋》、《毒枭》、《怪奇物语》。springcloud的微服务就是基于Netflix这家公司的开源产品来作的。
Netflix的开源框架组件已经在Netflix的大规模分布式微服务环境中通过多年的生产实战验证,正逐步被社区接受为构造微服务框架的标准组件。Spring Cloud开源产品,主要是基于对Netflix开源组件的进一步封装,方便Spring开发人员构建微服务基础框架。对于一些打算构建微服务框架体系的公司来讲,充分利用或参考借鉴Netflix的开源微服务组件(或Spring Cloud),在此基础上进行必要的企业定制,无疑是通向微服务架构的捷径。
按照官方介绍:
Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.Eureka 是一个基于 REST 的服务,主要在 AWS 云中使用, 定位服务来进行中间层服务器的负载均衡和故障转移。
Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 做为服务注册功能的服务器,它是服务注册中心。而系统中的其余微服务,使用 Eureka 的客户端链接到 Eureka Server,并维持心跳链接。这样系统的维护人员就能够经过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其余模块(好比Zuul)就能够经过 Eureka Server 来发现系统中的其余微服务,并执行相关的逻辑。
Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用做服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、做为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。
用官方的一张图来认识一下:
[
](https://springcloud-oss.oss-c...
上图简要描述了Eureka的基本架构,由3个角色组成:
一、Eureka Server
终于到了重头戏,开始撸代码~~~
关于建立springcloud项目,目前有两种比较方便的方案,核心都是同样的,你们自行选择本身使用方便的。
方式一:
打开spring的官方连接:
在Group中填入本身的组织,通常填写公司的域名的到写,例如com.jd或者com
.baidu,这里我直接写com.springcloud。
在Artifact中填写工程的名称,这里我直接写Eureka。
package选择jar,java选择8,至此,基础选择已经全都选完,接下来要开始选择咱们使用的springcloud的组件了,也就是重头——Eureka组件。
在Dependencies中找到Spring Cloud Discovery,选择Eureka Serve,结果以下图:
[
](https://springcloud-oss.oss-c...
最后点击下方的绿色长条按钮 Generate the project 进行下载,等待下载完成后,直接将压缩包解压导入咱们的编辑工具idea里便可。
方式二:
基于idea建立,打开idea,首先file->new->project,选中spring Initializr,这时能够看到右侧让咱们选择一个初始化的服务url,默认的就是上面的官方连接,https://start.spring.io/
[
](https://springcloud-oss.oss-c...
点击next下一步,填写和上面同样的Group、Artifact、java版本、package方式等信息,继续next下一步,选择依赖,和前面的方法的同样,在Dependencies中找到Spring Cloud Discovery,选择Eureka Serve,点击next,选择项目名称和存储路径,点击finish,静静等一会,第一个项目Eureka就新鲜出炉了~~~
我通常选择第一种方式建立springcloud项目,这种方式不依赖IDE工具。
maven项目,首先看一下pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.springcloud</groupId> <artifactId>Eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Eureka</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
默认的配置文件是在resource下面的application.properties,在springboot的项目中,目前支持两种配置文件的形式,还有一种是yaml,我这里使用的全部配置全为yaml形式。
server: port: 8761 spring: application: name: eureka-serve eureka: server: enable-self-preservation: false client: register-with-eureka: false service-url: defaultZone: http://localhost:8761/eureka/
package com.springcloud.Eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
增长注解@EnableEurekaServer,在这个main函数上,直接右键debug就能够启动了,启动成功以下图所示:
[
](https://springcloud-oss.oss-c...
如今单机的注册中心已经成功启动, 引伸出来一个问题,注册中心是全部的服务提供者注册服务的地方,若是只有一台机器,一旦由于某些缘由,引起宕机,会形成总体服务不可用,因此,这种中心服务在生产环境必须是集群化部署,若是对高可用、容灾和备份有更高的要求,还能够分机房部署,分地区部署。
增长idea启动配置,点击右上角的Edit Configurations,以下图:
[
](https://springcloud-oss.oss-c...
在打开的窗口中新建一个springboot的启动方式,命名为Eureka1,增长启动参数Program arguments:–server.port=8080,点击apply保存,以下图:
[
](https://springcloud-oss.oss-c...
使用新建立的启动配置启动服务,如今能够看到正常启动。接下来就是修改配置文件,使两个独立的服务变为集群。
server: port: 8761 spring: application: name: eureka-serve eureka: server: enable-self-preservation: false client: register-with-eureka: false service-url: defaultZone: http://localhost:8761/eureka/,http://localhost:8080/eureka/
只须要在defaultZone上新增一个地址咱们新服务的地址http://localhost:8080/eureka/,便可由单机立马变成双机。
如今分别使用两个启动配置启动Eureka,能够看到以下图所示:
[
](https://springcloud-oss.oss-c...
红框中的内容表示咱们如今已经有两个eureka服务了。
上面讲了双机的配置方案,同理,多机的配置就是在defaultZone后面增长其余机器的服务地址。