在讲解之前,因为博主是构建的module的多项目结构,所以为了方便构建了一个基础的依赖项目,大家可以去创建一下也可以直接使用依赖pom导入

https://blog.csdn.net/qq_37892957/article/details/88629527

一、概述

1.1 什么是eureka?

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

    Eureka的服务端提供了较为完善的REST API,所以Eureka也支持将非java语言实现的服务纳入到Eureka服务治理体系中来,只需要其他语言平台自己实现Eureka的客户端程序。目前.Net平台的Steeltoe、Node.js的eureka-js-client等都已经实现了各自平台的Ereka客户端组件。

1.2 Eureka Server到底能干嘛?

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

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

1.3 Eureka服务注册中心到底是什么?

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

 

二、项目搭建

2.1 创建一个SpringBoot的项目 名字为spring_cloud_eureka

2.2 给spring_cloud_eureka添加依赖

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <!-- 由于我的项目结构是构建的module的 所以我引入我sprng_cloud_dependcy依赖项目的地址 -->
    <parent>
        <groupId>com.bean</groupId>
        <artifactId>spring_cloud_dependcy</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../spring_cloud_dependency/pom.xml</relativePath>
    </parent>

    <artifactId>spring_cloud_eureka</artifactId>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--eureka-server服务端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <!-- 配置SpringCloud访问服务注册中心安全验证机制 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>


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

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
</project>

2.3 给我们的启动类加上@EnableEurekaServer 标注着这是一个eureka服务端

2.4 配置application.yml

spring:
  application:
    #切记这里不能打下划线名称 不然会造成服务注册中心项目无法启动 详情可以看我的博文
    name: spring-cloud-eureka
  #配置安全检验机制 
  security:
    user:
      name: root
      password: root

server:
  port: 8861

eureka:
  client:
    #服务端是否自己注册自己
    register-with-eureka: false
    #是否去检索服务
    fetch-registry: false
    service-url:
      #集群配置 下一篇博文讲解
      #defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka2:8862/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka3:8863/eureka/
      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@localhost:8861/eureka/
  instance:
    #表示eureka server收到client的心跳时间开始 到等待下一次时心跳时间的最大等待时间 默认为90s 超过等待90秒 eureka server就会该实例剔除服务注册中心 (按需更改,可以不配置使用默认)
    lease-expiration-duration-in-seconds: 90
    #标识eureka client发送给server端的频率 如果在规定时间内 server端还未接收到心跳 则剔除该实例 默认时间30s (按需更改,可以不配置使用默认)
    lease-renewal-interval-in-seconds: 30

2.5 已经配置好了我们的eureka服务端了,启动我们的SpringBoot项目

http://localhost:8861/login

输入你的配置的安全检验的账户密码,然后点击进入就会看到服务注册中心的页面信息

 

三、疑问

3.1 为什么我们需要配置SpringCloud的安全检验机制?

答:你想呀,你构造一个微服务系统肯定不想把这个服务注册中心的信息界面给用户们去看,也不想有人碰巧输入这个地址正好进入,这样做能够很好的提高系统的安全。

3.2 为什么spring.application.name使用下划线会造成什么问题?

java.lang.IllegalStateException: No instances available for spring_cloud_eureka

配置下划线会造成客户端找不到服务端的具体实例名称。可以看看这篇博客(https://blog.csdn.net/qq_37892957/article/details/88625114

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐