一.什么是Eureka
•Eureka是netflix的一个子模块,也是核心模块之一,Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现和注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务,而不需要修改服务调用的配置文件了,功能类似于dubbo的注册中心,比如zookeeper。
•Eureka采用AP原则 A(可用性) p(分区容错性)
二.原理讲解
SpringCloud封装了Netflix公司开发的Eureka模块来实现服务注册时和发现。
Eureka采用了C-S的设计架构。Eureka Server作为服务注册功能的服务器,它是服务注册时中心。
而系统中的其他微服务,使用eureka的客户端连接到eureka server并维持心跳连接。这样系统的维护人员就可以通过eureka server来监控系统中各个微服务是否正常运行。SpringCloud的一些其他模块 就可以通过eureka server来发现系统中的其他微服务,并执行相关的逻辑。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务注册服务。各个节点启动后,会在Eureka Server中进行注册,这样Eureka server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
三.创建项目
•导包
1 <!--导包~--> 2 <dependencies> 3 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server --> 4 <dependency> 5 <groupId>org.springframework.cloud</groupId> 6 <artifactId>spring-cloud-starter-eureka-server</artifactId> 7 <version>1.4.6.RELEASE</version> 8 </dependency> 9 <!--热部署工具--> 10 <dependency> 11 <groupId>org.springframework.boot</groupId> 12 <artifactId>spring-boot-devtools</artifactId> 13 </dependency> 14 </dependencies>
•创建application.yml,编写配置文件
server: port: 7001 #Eureka配置 eureka: instance: hostname: localhost #Eureka服务端的实例名称 client: register-with-eureka: false # 表示禁止eureka注册中心注册自己 fetch-registry: false #fetch-registry如果为false,则表示自己为注册中心 service-url: #服务的注册中心地址 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
•开启功能
@EnableEurekaServer
•测试
Eureka:服务注册-信息配置-自我保护机制
•服务提供者加入eureka依赖
1 <!--EUREKA--> 2 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --> 3 <dependency> 4 <groupId>org.springframework.cloud</groupId> 5 <artifactId>spring-cloud-starter-eureka</artifactId> 6 <version>1.4.6.RELEASE</version> 7 </dependency>
•注册服务
#Eureka的配置,服务注册到哪里
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/ #eureka服务中心的地址
•开启功能
1 @EnableEurekaClient //在服务启动后自动注册到Eureka中
•测试
注册成功
•如何修改Status里面的名称 eureka上的默认描述信息
1 instance: 2 instance-id: springcloud-provider-dept8001
•添加监控信息,导入依赖
1 <!--actuator完善监控信息--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-actuator</artifactId> 5 </dependency>
•配置信息
1 #info配置 2 info: 3 app.name: kuangshen-springcloud 4 company.name: blog.kuangstudey.com
测试
如果不设置的话,默认点进去报404,配置这个,就是想让别人知道你的微服务是干什么的。
Eureka:自我保护机制
•当我们进行SpringCloud微服务开发的时候,有可能会出现如下的一些红色提示信息。这个是Eureka的自我保护机制。
•Eureka的自我保护机制用最通俗的语言说就是:好死不如赖活着。一句话:某时刻某一个微服不可用了,eureka不会立刻清理,依旧会对改微服的信息进行保存。
•默认情况下,如果eureka server在一定时间内没有接收到每个微服务实例的心跳,eureka server将会注销该实例。
•在自我保护模式中,eureka server会保护服务注册表中的信息,不再注销任何服务实例。当它收到的心跳数重新恢复到阀值以上时,该eureka server节点就会自动退出自我保护模式。
•在spring cloud中,可以使用eureka.server.enable-self-preservation=false禁用自我保护模式【不推荐关闭自我保护模式】
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
•扩展团队开发
开启动能
1 @EnableDiscoveryClient
1 @Autowired 2 private DiscoveryClient client;//获取一些配置的信息,得到具体的微服务,主要导入的是springcloud的包 3 4 5 @GetMapping("/dept/discovery") 6 //注册进来的微服务~获取一些信息 7 public Object discovery() { 8 //获取微服务列表的清单 9 List<String> services = client.getServices(); 10 System.out.println("discovery=?services" + services); 11 12 //得到一个具体的微服务信息,通过具体的微服务id applicationName 13 List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT"); 14 for (ServiceInstance instance : instances) { 15 System.out.println( 16 instance.getHost() + " " + 17 instance.getPort() + " " + 18 instance.getUri() + " " + 19 instance.getServiceId() 20 ); 21 } 22 return this.client; 23 }
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Eureka:集群环境配置
•创建项目
•导入依赖7002 7003
1 <!--导包~--> 2 <dependencies> 3 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server --> 4 <dependency> 5 <groupId>org.springframework.cloud</groupId> 6 <artifactId>spring-cloud-starter-eureka-server</artifactId> 7 <version>1.4.6.RELEASE</version> 8 </dependency> 9 <!--热部署工具--> 10 <dependency> 11 <groupId>org.springframework.boot</groupId> 12 <artifactId>spring-boot-devtools</artifactId> 13 </dependency> 14 </dependencies>
•编写配置7002 7003
把7001的配置赋值粘贴过来就好了,端口号改一下。
•编写主启动类 直接赋值粘贴7001修改一个类 例如:7003
•修改本机的ip host里面
•从新编写配置,保证7001,7002,7003之间有连接
1 defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ //例子,下面的照着修改就可以了
•提供者的配置,保证注册到三个eureka中
1 defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/
•测试
•知识点:Eureka和zookeeper的区别 百度搜索CAP原则
Eureka采用AP,zookeeper采用CP