Spring Cloud Eureka

简介

Eureka 提供基于 REST 的服务的管理。使用该框架后,可以将业务组件注册到 Eureka 容器中,Eureka 主要维护这些服务的列表并自动检查它们的状态 。

构建Eureka应用

Eureka架构

在这里插入图片描述

  • Eureka 服务器:保存已注册服务实例,保持客户端的最新状态。
  • Eureka 客户端(服务提供者):提供服务,并发送心跳检测,同时可以获取服务器的注册列表。
  • Eureka 客户端(服务调用者):对服务进行发现与调用。
    注: Eureka 客户端保存了服务注册表信息,调用服务的时候不再进过服务器。

构建Eureka服务器

  1. 新建项目时,选择eureka server
    在这里插入图片描述
  2. 对应的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.alex</groupId>
    <artifactId>eureka_server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka_server</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  1. 启动类中添加注解@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}
  1. 默认情况下,Eureka服务器也会把自己当成客户端,注册自己,此时会报错。
    在这里插入图片描述
    配置application.yml,取消自注册。
eureka:
  client:
    register-with-eureka: false //不向服务器注册
    fetch-registry: false //不拉取服务器的注册列表
  1. 启动服务器,访问
    在这里插入图片描述

构建Eureka服务提供者(Eureka客户端)

  1. 新建Spring boot项目时,选择
    在这里插入图片描述
  2. 项目构建完成之后,具体的pom.xml,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.alex</groupId>
    <artifactId>eureka_provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka_provider</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  1. 在boot启动类中添加@EnableEurekaClient注释
@SpringBootApplication
@EnableEurekaClient
public class EurekaProviderApplication {

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

}
  1. application.yml中添加以下配置
server:
  port: 9001

spring:
  application:
    name: hello-server-provider

eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka
  1. 添加一个Restful接口
@RestController
public class HelloController {
    @GetMapping("/hi")
    public String sayHi(){
        return "hello,world!";
    }
}
  1. 启动项目,可以看到eureka server界面出现对应服务提供者信息,接口也可调用
    在这里插入图片描述
    在这里插入图片描述

Eureka服务器集群

在实际生产环境中,经常需要对Eureka服务器进行集群操作,集群Eureka服务器的方法非常简单,就是让各个服务器进行相互注册。假如有三台服务器,则它们的配置文件可以进行如下修改:

---
spring:
  application:
    name: spring-cloud-eureka
server:
  port: 8001
eureka:
  instance:
    hostname: localhost1
  client:
    serviceUrl:
      defaultZone: http://localhost2:8002/eureka/,http://localhost3:8003/eureka/
---
spring:
  application:
    name: spring-cloud-eureka
server:
  port: 8002
eureka:
  instance:
    hostname: localhost2
  client:
    serviceUrl:
      defaultZone: http://localhost1:8001/eureka/,http://localhost3:8003/eureka/
---
spring:
  application:
    name: spring-cloud-eureka
server:
  port: 8002
eureka:
  instance:
    hostname: localhost3
  client:
    serviceUrl:
      defaultZone: http://localhost1:8001/eureka/,http://localhost2:8002/eureka/

Eureka常用配置

心跳检测配置

  • eureka.instance .leaseRenewallntervallnSeconds :指定客户端发送到服务器的心跳间隔时间,默认为30秒。
  • eureka.instance.leaseExpirationDurationlnSeconds :指定服务器没有收到心跳的最大时限,果在一定期限内没有接收到服务实例的心跳,那么会将该实例从注册表中清理掉,默认值为90秒。

注册表抓取时间间隔

eureka.client.registryFetchIntervalSeconds :指定客户端到服务器抓取服务注册表的时间间隔,默认为30秒。

服务自我保护模式

客户端会定时发送心跳给服务器端,如果心跳的失败率超过一定比例,服务会将这些实例保护起来。此时,该宕机服务仍然存在注册表中,可能导致“雪崩”效应,可以通过将eureka.server.enable-self-preservation设置为false,关闭自我保护模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值