Eureka服务注册与发现及其使用

一)、是什么

github网址:https://github.com/Netflix/eureka/wiki

定义如下

Eureka服务注册与发现及其使用_第1张图片

Eureka是Neflix的一个子模块,也是核心模块之一。Euraka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务架构来说是非常重要的,有了服务注册和发现。只需要使用服务标识符,就可以访问到服务,而不需要修改服务调用配置文件。功能有点类似于dubbo注册中心,比如Zookeeper

 

Netflix在设计Euraka时遵守的就是AP原则

二)、原理

2.1、Eureka的基本框架

Springcloud封装了Netflix公司开发的Eureka模块来实现服务注册和发现,(对比Zookeeper

Eureka采用的是C-S的设计架构,Eureka Server作为服务注册功能的服务器,它是注册中心。

 

而系统中的其他微服务使用Erueka的客户端连接到Eureka Server并维持心跳。这样系统的维护人员就可以通过Eureka Server来监控系统中的各个微服务是否正常运行。SpringCloud的一些其他模块(比如:zuul)就可以通过Erueka Server来发现系统中的其他微服务,并执行相关逻辑

 

Eureka的基本架构

 

Eureka服务注册与发现及其使用_第2张图片

 

2.2、Eureka的两大组件:Eureka Server 和Eureka Client

Eureka Server提供服务注册

各个节点启动后,会在EurekaServer中进行注册,这个EurekaServer 中的注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

 

Eureka Client是一个Java客户端

用于简化Eureka Server的交互,客户端同时也是具备一个内聚的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将向Eureka Server发送心跳(默认周期30s)。如果Eureka在多个心跳周期内没有接收到某个节点的心跳。Eureka Server将会进入自我保护机制(默认90s)

 

2.3、三大角色

Eureka Server提供服务的注册和发现

Server Provider 服务提供方将自身的服务注册进入Eureka,从而使服务的消费方能够找到

Server consumer 服务的消费方,从Eureka获取注册服务列表,从而消费服务

 

maven中央仓库网址:https://search.maven.org/

三)、怎么使用

springcloud整合Eureka,使在我的博客Rest微服务简介和构建的基础上进新整合的。由于其springboot采用的版本比较新,在其基础上按照下面3.1的步骤构建好Eureka Server,启动主启动类,报如下错误:Unable to start web server; nested exception is org.springframework.boot.web。所以对其版本进行了相应的调整。

源码下载网址:https://download.csdn.net/download/erge353729094/12783852

该资源已经整合了Eureka,属于单机版,后面还会在该资源的基础上提供集群版

约定:

Eureka Server指得就是microservercloud-eureka-7001

Provider Server指得就是microservercloud-provider-dept-8001

Consumer Server指的就是microservercloud-consumer-dept-80

3.1、microservicecloud-eureka-7001构建,也就是Eureka Server的构建

3.1.1、创建子工程microservicecloud-eureka-7001

3.1.2、pom文件的配置

3.1.3、yml文件的配置

3.1.3、创建主启动类EurekaServer7001_App

       需要在著启动类上添加开启Eureka服务的注解标签:@EnableEurekaServer

3.1.4、测试

http://localhost:7001/

Eureka服务注册与发现及其使用_第3张图片

 

3.2、microservicecloud-provider-dept-8001将已有的部门微服务注册进Euraka服务中心,也就是将Provider Sever 注册到Eureka Server服务中

3.2.1、修改Provider Server 的pom文件。将Provider Server 注册到到Eureka

        
        
            org.springframework.cloud
            spring-cloud-starter-eureka
            1.2.7.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-config
            1.2.3.RELEASE
        

3.2.2、修改Provider Server 的yml文件。

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka           #客户端注册进入eureka服务列表。该值与Eureka Server系统中的该属性保持一致

3.2.3、在Provider Server 的主启动类上添加开启Eureka client的注解@EnableEurekaClient

Eureka服务注册与发现及其使用_第4张图片

3.2.3、测试

      启动Eureka Server,再启动Provider  Server

     访问: http://localhost:7001/

Eureka服务注册与发现及其使用_第5张图片

 

3.3、actuator与注册微服务信息完善

3.1、主机名称和服务名称的修改

        在 Provider Server中 yml文件中添加:eureka.instance.instance-id: 别名 

3.2、访问信息有IP信息的提示

        在Provider Server 中yml文件中添加:eureka.instance.prefer-ip-address:  true  #访问路径可以显示IP

      Eureka服务注册与发现及其使用_第6张图片

3.3、微服务info内容详细信息

        当前问题:超链接点击报ErrorPage

        3.3.1、修改Provider Server的pom文件

        
            org.springframework.boot
            spring-boot-starter-actuator
        

        3.3.2、在总的父工程中修改pom.xml添加构建builder,其作用就不可以去网上搜索,这里就不详细叙述了。

 
        microservicecloud
        
            
                src/main/resources
                true
            
        
        
            
                org.apache.maven.plugins
                maven-resources-plugin
                
                    
                        $
                    
                
            
        
    

        3.3.3、在Provider Server中的yml文件中添加info信息

              Info.app.name: microservicecloud-provider-dept

              Info.company.name: www.dabai.com

              Info.build.artifactId: $project.artifactId$

             Info.build.version: $project.version$

Eureka服务注册与发现及其使用_第7张图片

启动Eureka Server启动类,再启动Provider Server后,访问:http://localhost:7001/

Eureka服务注册与发现及其使用_第8张图片

点击主机名连接进入的页面:

四)、Eureka的自我保护

好死不如烂活着

某时候某一个微服务不可用,eureka不会立刻清理,依旧会对微服务信息进行保护

在默认情况下,如果EurekaServer在一定的时间内没有接收到某个微服务实例的心跳,EurakaServer将会注销实例(默认90秒),但当网络分区故障发生时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险,因为微服务本身是健康的,此时本不应该注销这个微服务,Euraka通过“自我保护模式”来解决这个问题--当EurekaServer节点在短时间内丢失过多的客户端(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,EurekaServer就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销微服务)。当网络故障恢复后,该EurakaServer会自动退出自我保护模式

 

在自我保护模式中,EurekaServer会保护注册表中的信息,不会注销任何服务实例,当它收到的心跳数重新恢复到阈值以上时,该EurakaServer节点就会自动退出自我保护模式,它设计哲学就是能可保留错误的服务注册信息,也不盲目的删除任何可能健康的微服务实例,一句话将:就是好死不如烂活着

 

综上所述:自我保护模式是一种应对网络安全保护措施,它的架构哲学是宁可保留所以的微服务(健康的微服务和不健康的微服务),也不盲目的注销任何健康的微服务,使用自我保护模式,可以让Eureka集群更加健壮、稳定。

 

在springCloud中,可以使用Eureka.server.enable-self-preservation =false禁用自我保护模式

建议不禁用自我保护模式

表现形式:

Eureka服务注册与发现及其使用_第9张图片

 

五)、Eureka服务发现

对于注册进入Eureka里面的微服务,consumer server系统可以通过服务发现来获得该服务的相关信息,如:端口号,主机名,url等。不是重点。了解即可。

5.1、修改provider Server中com.dabai.springcloud.controller.DeptCotroller添加如下代码

    @Autowired
    private DiscoveryClient discoveryClient;

    @RequestMapping(value = "/dept/discovery",method = RequestMethod.GET)
    public Object discovery(){
        List services = discoveryClient.getServices();
        System.out.println("**********"+services);

        List instances = discoveryClient.getInstances("MICROSERVICECLOUD-DEPT");
        for(ServiceInstance elem:instances){
            System.out.println(elem.getServiceId()+"\t"+elem.getHost()+"\t"+elem.getPort()+"\t"+elem.getUri());
        }
        return this.discoveryClient;
    }

5.2、在provider Server的主配置类上添加@EnableDiscoveryClient注解

5.4、启动Eureka Server,再启动provider Server,访问:http://localhost:8001/dept/discovery

5.5、再Consumer Server系统中com.dabai.springcloud.controller.DeptController_Consumer添加如下代码

    @RequestMapping(value="/consumer/dept/discovery")
    public ResponseEntity discovery(){
        String url=REST_URL_PREFIX +"/dept/discovery";
        return restTemplate.getForEntity(url,DiscoveryClient.class);
    }

5.6、启动Eureka Server,启动provider Server,再启动consumer Serve,访问http://localhost/consumer/dept/discovery

SpringCloud整合Eureka单机版完成

参考:周阳老师教学视频

https://blog.csdn.net/qwe86314/article/details/94552801

 

总结:站在巨人的肩膀上才能学的更快

你可能感兴趣的:(SpringCloud)