SpringCloud之Eureka服务发现和注册(二)

前言

  服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。

  SpringCloud Eureka使用Netflix Eureka来实现服务注册和发现。它既包含了服务端组件,也包含了客户端组件,并且服务端与客户端均采用java编写,所以Eureka主要适用于通过java实现的分布式系统,或是JVM兼容语言构建的系统。

  Eureka的服务端提供了较为完善的REST API,所以Eureka也支持将非java语言实现的服务纳入到Eureka服务治理体系中来,只需要其他语言平台自己实现Eureka的客户端程序。

Eureka服务治理体系如下:

  

服务注册

  在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,包括服务的主机与端口号、服务版本号、通讯协议等一些附加信息。注册中心按照服务名分类组织服务清单,同时还需要以心跳检测的方式去监测清单中的服务是否可用,若不可用需要从服务清单中剔除,以达到排除故障服务的效果。

服务发现

  在服务治理框架下,服务间的调用不再通过指定具体的实例地址来实现,而是通过服务名发起请求调用实现。服务调用方通过服务名从服务注册中心的服务清单中获取服务实例的列表清单,通过指定的负载均衡策略取出一个服务实例位置来进行服务调用。

一、Eureka介绍

  Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能

Eureka包含两个组件:Eureka Server 和 Eureka Client

Eureka Server

  Eureka服务端,即服务注册中心,提供服务注册服务。它同其他服务注册中心一样,支持高可用配置。依托于强一致性提供良好的服务实例可用性,可以应对多种不同的故障场景。

  Eureka服务端支持集群模式部署,当集群中有分片发生故障的时候,Eureka会自动转入自我保护模式。它允许在分片发生故障的时候继续提供服务的发现和注册,当故障分配恢复时,集群中的其他分片会把他们的状态再次同步回来。集群中的的不同服务注册中心通过异步模式互相复制各自的状态,这也意味着在给定的时间点每个实例关于所有服务的状态可能存在不一致的现象。

Eureka Client

  是一个java客户端,用于简化Eureka Server的交互,主要处理服务的注册和发现。客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中。客户端同时也具备一个内置的,使用轮询(round-robin)负载算法的负载均衡器,在应用程序启动时,Eureka客户端向服务注册中心注册自身提供的服务,并周期性的发送心跳来更新它的服务租约。同时,他也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期行的刷新服务状态。

Eureka三大角色

1. Eureka Server提供服务注册和发现

2. Service Provider 服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到;

3. Service Consumer 服务消费方从Eureka获取注册服务列表,从而能够消费服务。

二、服务搭建

四步骤:1. 导入pom       2. 编写配置文件        3. 添加注解         4. 启动验证

Eureka服务搭建(单机)

通过idea新建springcloud-provider-dept-7001子项目

1. 引入pom依赖

  <dependencies>
      <dependency><!-- eureka-server服务端 -->
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka-server</artifactId>
      </dependency>
       <!-- 修改后立即生效,热部署 (一修改,自动发布,自动构建)-->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>springloaded</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
      </dependency>
  </dependencies>

全局配置文件:

  而Eureka Server本身也是一个服务,同时又是一个注册中心。在Spring Cloud中,启动的微服务会自动的搜索注册中心并注册服务,那么在单机版Eureka Server环境中,当前服务注册到当前服务中,明显是不合适的。所以搭建Eureka Server单机版时,需要提供特殊的全局配置,避免回路注册逻辑。
  同理,Eureka Server服务在注册中心中发现服务列表逻辑也是不必要的。毕竟注册中心是一个中立的服务管理平台,如果是单机版Eureka Server环境中,Eureka Server服务再去发现服务列表,明显也是不必要的。也需要通过全局配置,避免回路发现逻辑。

2. 编写配置文件

server:
  port: 7001
spring:
  application:
    name: eureka-server-7001  #服务名称
eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: false #false表示不想注册中心注册自己
    fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      defaultZone: http://eureka1:7001/eureka/

关于Eureka的配置

  • eureka.client.registerWithEureka

    表示是否将自己注册到Eureka Server,默认为true。由于当前应用就是Eureka Server,所以不需要注册,修改为false。

  • eureka.client.fetchRegistry

    表示是否从Eureak Server获取注册信息,默认为true。由于示例中是单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,所以修改为false。如果是集群,则设置true,因为如果此服务坏掉,通过其他服务进行工作。

  • eureka.client.serviceUrl.defaultZone

    设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。

3. 添加注解

  这个比较简单,在启动类上添加@EnableEurekaServer注解

@SpringBootApplication
@EnableEurekaServer //EnableEurekaServer 服务端启动类,可以接受别人注册进来
public class EurekaServer_7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer_7001.class, args);
    }
}

4. 启动检验

  浏览器输入配置的网址:http://localhost:7001/ 出现如下页面即可。

三、将服务提供者注册到注册中心

将springcloud-provider-dept-8001项目注册到Eureka

① 修改pom和application.yml文件

  在之前文件基础上添加如下

 <!-- 将微服务provider侧注册进入eureka(引入eureka的client端) -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-config</artifactId>
      </dependency>

 

② 在启动类上添加注解

③ 辅助信息配置

是否显示服务提供者url真实路径 即IP地址。

启动Eureka服务提供者

④ 微服务info内容详细信息

1.修改springcloud-provider-dept-8001项目工程的pom.xml文件

2. 修改总父工程microservicecloud的pom.xml添加构建build信息

3.修改springcloud-provider-dept-8001项目工程的application.yml文件

4. 启动Eureka和服务提供者

 

 

对于注册进eureka里面的微服务,可以通过服务发现来活的该服务的信息;


修改springcloud-provider-dept-8001工程的DeptController

DeptProvider8001主启动类 添加一个注解@EnableDiscoveryClient

修改springcloud-consumer-dept-80工程的DeptController_Consumer(添加一个调用提供者的信息方法)

 

启动Eureka、provider8001服务提供、consumer80服务消费

分别调用提供者接口 和 消费者接口

同时对应provider中的控制台,打印出相关的服务信息

 

 

总结

posted @ 2019-12-04 23:32  王大军  阅读(443)  评论(0编辑  收藏  举报