SpringCloud-Eureka

一.什么是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

原文地址:https://www.cnblogs.com/Spring-M/p/12769781.html