[Spring Cloud 基础]-Eureka的使用

1、核心概念

  • 读音: 英[juˈriːkə] 美[juˈriːkə]
  • Spring Cloud集合中一个组件,用于服务注册和发现。
  • 紧遵AP原则(CAP原则)
  • Eureka的版本需与Spring Boot的版本一致,否则两者容易出现兼容问题。版本号的管理可以通过dependencyManagement进行统一管理(后面有提及)

CAP原则(见百度百科)又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。==CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。==

CAP理论是分布式架构中重要理论

  • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
  • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
  • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

2、使用

Eureka整体上分为两个主体:Eureka Server 和 Eureka Client。

2.1 Eureka Server

2.1.1 添加依赖

在新建项目的时候可以通过"dependencies->Cloud Discovery->Eureka Server"选择依赖 image.png

在现有工程的pom文件中新增Eureka Server的依赖:

<!--在dependencies节点中添加如下内容-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>	
复制代码

image.png

spring-cloud-starter-eureka-server 和 spring-cloud-starter-netflix-eureka-server的区别:在maven仓库中查询可以看到,现在spring-cloud-starter-eureka-server已经不建议使用了,请使用spring-cloud-starter-netflix-eureka-server。

2.1.2 添加注解

工程入口类增加@EnableEurekaServer注解即可。

image.png

2.1.3 修改配置

打开.../src/main/resources/application.yml文件配置以下内容(如果你的工程中是application.properties,可以修改后缀为yml, 这两个配置文件都可以配置工程, yml的格式更直观一些):

server:
  # 配置服务端口
  port: 8081
eureka:
  client:
    # 配置eureka服务器地址
    service-url:
      defaultZone: http://127.0.0.1:8081/eureka
      # 是否需要将自己注册到注册中心(注册中心集群需要设置为true)
      register-with-eureka: false
      # 是否需要搜索服务信息 因为自己是注册中心所以为false
      fetch-registry: false
复制代码

以上为简单配置,其中较为关键的是服务端口号和Eureka Server的服务器地址,该地址是Eureka Client注册服务的关键信息。

到此Eureka Server配置完成,可以运行工程,如果运行没有问题,通过浏览器打开http://localhost:8081/ 如果出现类似下面截图内容,则表示服务中心运行成功,此时便可接受其他服务的注册。

image.png

2.1.4可能遇到的问题

2.1.4.1 spring-cloud-starter-netflix-eureka-server版本号问题

新建的Module如果只勾选了Eureka Server依赖,直接运行不成功,经排查发现主要原因是spring-cloud-starter-netflix-eureka-server依赖没有版本号。

参考链接

主要原因:只选了Eureka Server依赖,在pom文件中添加的依赖信息是没有版本号的:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
</dependencies>

复制代码

解决办法:在pom文件的依赖信息中添加版本号(版本号查看地址)

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
</dependencies>
复制代码

注意:Eureka的版本号需要与Spring Cloud一致,否则两者很难兼容运行

2.1.4.2 java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.([Ljava/lang/Object;)V

注意前面所说,Eureka的版本号需要与Spring Cloud一致,否则两者很难兼容运行,该问题在两者版本号不一致时可能出现相似异常信息。

解决办法:保持Eureka与Spring Cloud的版本一致; 在pom文件的project节点中增加以下信息,移除Eureka依赖的version信息:


<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-dependencies</artifactId>
         <version>${spring-cloud.version}</version>
         <type>pom</type>
         <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>
复制代码

image.png

扩展说明:如果Module新建的时候,本身勾选了Web依赖的情况下,上述信息已自动添加到pom文件中。

2.2 Eureka Client

2.2.1 添加依赖

在新建项目的时候可以通过"dependencies->Cloud Discovery->Eureka Discovery Client"选择依赖; 注意,通常服务需要对外提供接口,所以一般需要同时选中Web依赖,微服务之间可能存在互相调用,因此一般需要选中Feign依赖;

image.png

image.png

image.png

2.2.2 添加注解

工程入口类增加@EnableEurekaClient注解,表示是Eureka客户端,可以注册到Eureka Server;如果工程中访问了其他Eureka Client的微服务,则需要添加@EnableFeignClients

image.png

2.2.3 配置

在工程的application.yml增加如下配置信息:

server:
  # 服务端口号
  port: 8082
spring:
  application:
    # 服务名称 - 服务之间使用名称进行通讯
    name: service-news
eureka:
  client:
    service-url:
      # 填写注册中心服务器地址
      defaultZone: http://localhost:8081/eureka
    # 是否需要将自己注册到注册中心
    register-with-eureka: true
    # 是否需要搜索服务信息
    fetch-registry: true
  instance:
    # 使用ip地址注册到注册中心
    prefer-ip-address: true
    # 注册中心列表中显示的状态参数
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
复制代码

到处Eureka Client配置完成,运行工程成功的话,便可通过注册中心查看到该服务。

image.png

经过以上步骤,Eureka便可进行简单实用,Eureka的配置信息根据个人需求自行查阅。服务在服务中心注册成功之后,服务之间便可通过Feign进行相互调用,关于Feign的使用参见后续文章。

猜你喜欢

转载自juejin.im/post/7017357638912442382