Spring Cloud搭建-Eureka服务

Spring Cloud 简介

Spring Cloud为开发人员提供了快速构建分布式系统中的一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调导致了锅炉板模式,并且使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。它们可以在任何分布式环境下工作,包括开发人员自己的笔记本电脑、裸机数据中心和云计算等托管平台。

Spring Cloud 优势

  1. 约定优于配置;
  2. 适用于各种环境;
  3. 灵活,组件丰富;
  4. 隐藏组件复杂性,提供声明式,无XML的配置方式,易懂。

Spring cloud 劣势

  1. 微服务过多加大了运维成本;
  2. 分布式中网络延迟,系统容错,分布式事务等有很大的挑战性;
  3. 重复劳动可能偏多,有时候的动作可能多个微服务都会相同。

但是毋庸置疑的是,springCloud带给我们的优势确实比劣势要大。所以,让我们走进springCloud的大门来深入了解一下它。


Spring Cloud 搭建

SpringCloud是一个分布式的系统,这就意味着我们需要考虑多个微服务之间调用的问题,比如URL接口调用,服务断开处理,地址发生变动问题等。我们如何处理这样的问题呢?

Eureka服务

Eureka服务是一个开源的服务发现组件,本身是一个基于REST的服务。它包含了Server和Client两大部分。可集成再cloud中,实现微服务的注册和发现。

Eureka的两个组件:Eureka Server  and Eureka Client.

Eureka Server提供服务发现能力,各个微服务启动时,会向Eureka server注册自己的信息(ip,端口,服务名称等)。

Eureka Client是一个java客户端,简化和Eureka Server的交互。

具体职责:

  • 微服务启动时,会周期性的向Eureka Server发送心跳以续约自己的“租期”,也就是说,当服务启动,告知该Server基本信息后,并且周期性的发送心跳来判断微服务没有中断,一直保持链接状态。如果Server在一定的时间内未收到某个服务的心跳,则认为该服务已被中断,Server便会注销属于这个微服务的信息
  • 默认情况下,多个Eureka Server可以相互复制,实现服务注册表同步;Eureka Server也可以作为Eureka Client。
  • Eureka Client会缓存服务注册表的信息;无需重复亲请求Eureka Server查询注册信息,减少Eureka Server压力;哪怕所有节点都宕掉后,消费者也可以从缓存中取出注册消息。

OK,通过对Eureka的说明,我们可以选择该组件进行搭建。

Spring Cloud Eureka 搭建

Eureka Server搭建

我使用的是IDEA开发工具,我们来创建Spring Cloud项目。首先我们创建一个maven项目,因为后面搭建的项目我都希望是同一个maven下的,便于后续管理。

IDEA通过File-->new-->project-->maven,点击next,点击next,点击finish。这个很简单就不多说了。
Spring Cloud搭建-Eureka服务_第1张图片Spring Cloud搭建-Eureka服务_第2张图片
创建完maven项目之后,右键该项目,new-->Module, 选择Spring Initializr, SDK选择已经配置好的,点击next,名字自己命名,点击next,选择Spring Cloud Discovery后,勾选Eureka Server,点击next,点击finish。这样你就可以看到你的maven下有一个自己的module了。
Spring Cloud搭建-Eureka服务_第3张图片
这个时候让我们来看看module的pom文件中有一个依赖包:


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server

Eureka Server包已经导入,接下来我们要设置这个Module是Server。我们需要找到启动类,增加注解标注一个Eureka服务

@SpringBootApplication
@EnableEurekaServer     //标注为一个eureka服务
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

ok,现在我们设置下配置文件application.yml

server:
 port: 8761

eureka:
 instance:
  hostname: localhost
 client:
  registerWithEureka: false
  fetchRegistry: false
  serviceUrl:
   defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

简单讲解下配置属性:

  • eureka.instance.hostname:表示eureka的hostname;
  • eureka.client.registerWithEureka:表示是否将自己注册到Eureka Server,因为我们现在创建的就是Server,所以现在可以设置为false;
  • eureka.client.fetchRegister:表示是否从Eureka Server获取注册信息,同理,设置为false,还有一个原因就是我们现在还只是一个server,所以不需要同步其他注册信息;
  • eureka.client.serviceUrl.defaultZone:这个是与Eureka Server交互的地址了。多个Eureka Server可以以逗号的形式增加多个。

启动该项目,访问http://localhost:8761/,我们访问就可以看到这个注册中心了,现在是什么都木有。

Spring Cloud搭建-Eureka服务_第4张图片

至此,我们将server的搭建好了,接下来,开始搭建client。

Eureka Client搭建

相同的步骤,这个时候我们需要勾选Eureka discovery client, 不知和之前的server是一样的,我们就不重复了。

注意的是:@EnableDiscoveryClient   和  @EnableEurekaClient有什么区别呢?因为我们目前选择的是Eureka的组件,所以两者并没有任何的区别,但如果是非Eureka的组件,那使用后面的注解就说不通了,毕竟依赖包我们都没有,所以前者是适合各种组件,后者只适用于Eureka。

@SpringBootApplication
@EnableDiscoveryClient   //声明一个Eureka Client
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

那我们client如何和server相关联呢?我们需要将client这个服务注册到server上,修改client默认配置文件。

eureka:
 instance:
  prefer-ip-address: true
 client:
  serviceUrl:
   defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: eurekaClientTest1

解释一下,eureka.instance.perfer-ip-address 表示是否将IP注册到Eureka Server;如果不匹配或者配置为false,那么注册到Server的名字便是操作系统的hostname。我们不妨来尝试一下。

那如何关联到Server,我们从配置文件中也能看到,eureka.client.serviceUrl.defaultZone配置的地址,便是我们之前创建Server的地址,这样就可以将Client的信息配置到Server上了。

分别启动Server和Client。

这里会有一个问题,如果按照这样的步骤进行操作的话,Client是注册不到Server上的。那如何才能成功注册呢,那需要再Client的pom文件中添加web模块:


    org.springframework.boot
    spring-boot-starter-web

为什么需要添加web模块,那是因为我们需要自动访问/调用Server的URL,所以Client需要是一个web模块的项目。

至此,我们Eureka的注册中心是搭建好了。接下来我们需要进行验证。

  1. 配置文件中设置prefer-ip-address: true的时候,启动还是将操作系统的hostname传递过去了。这个时候查询源码发现,不仅仅是配置这个还需要配置eureka.instance.instance-id=${url}:${port},我们能够看到的就是:
  2. 搭建好了之后,我们怎么使用呢?我们下个题继续搭建。
  3. 当服务关闭之后,为什么我们还在在页面上看到该实例呢?那是因为eureka默认开启了自我保护机制,导致实际上已经停止服务的实例无法从注册中心剔除。所以如果需将Server中的属性eureka.server.enable-self-preservation=false就可以了。
    server:
     port: 8761
    
    eureka:
     server:
       enable-self-preservation: false
     instance:
      hostname: localhost
     client:
      registerWithEureka: false
      fetchRegistry: false
      serviceUrl:
       defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

     

你可能感兴趣的:(Spring Cloud搭建-Eureka服务)