SpringCloud系列(四) 搭建Eureka注册中心

公众号

关注公众号和我一起学习哦!
公众号


目前市场上主流的第一套微服务架构解决方案:Spring Boot + Spring Cloud Netflix 用的人数最多

但是 Netflix 已经在 2018年12月12日已经停止维护了,不过不影响我们正常使用

一、创建项目工程目录

在你的计算机上创建一个文件夹 名称为 hello-spring-cloud-netflix

使用IDEA 打开该目录

二、创建服务注册中心

1. 使用IDEA 创建一个新的模块

2. 创建SpringBoot 项目 名称为 spring-cloud-netflix-eureka

3.添加Eureka注册中心 需要的依赖 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>
        <!--注册SpringBoot的版本与SpringCloud的版本对应-->
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.yufire</groupId>
    <artifactId>spring-cloud-netflix-eureka</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>spring-cloud-netflix-eureka</name>
    <description>Eureka注册中心</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--添加SpringBoot的Web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--添加 Eureka的服务端依赖-->
        <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>


    <!--Spring Cloud 父级依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR3</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>

主要添加了 Spring Cloud的父级依赖、Eureka的服务端依赖


4. 修改SpingBoot配置文件application.yml

server:
  port: 9988 #服务注册中心端口号
eureka:
  instance:
    hostname: 127.0.0.1 #服务注册中心IP地址
    appname: eureka-server # 该服务的名称
  client:
    fetchRegistry: false #是否检索其他注册中心
    register-with-eureka: false # 是否把自己注册到注册中心 由于该项目是注册中心所以不需要注册
    service-url: # 配置注册中心的地址 url
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
  server: # 关闭自我安全检查 及时的排除调不可用的服务
    enable-self-preservation: false

5. 启动类添加开启Eureka的注解

@EnableEurekaServer // 开启 Eureka服务端
@SpringBootApplication
public class SpringCloudNetflixEurekaApplication {

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

}

6. 启动项目


7. 访问 地址

img

出现以上界面即为 Eureka注册中心启动成功!


三、注册中心添加密码

直接访问就可以进入页面有个隐患,就是非常的不安全,所以我们需要为Eureka注册中心添加密码

添加密码的配置也非常的简单 添加Maven依赖和application.yml配置即可

1. pom.xml 中添加以下依赖

 <!--登陆或连接验证的依赖 安全依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. application.yml 中配置认证密码

spring:
  security:
    user:
      name: root
      password: root

不配置密码也可以 SpringBoot会在项目启动的时候在控制台显示一个临时密码

此时的用户名为 user

Using generated security password: b4562d30-b463-4331-b762-6aebb602c38f

3. 再次访问 就会出现密码验证

4. 输入刚才配置的账号和密码即可进入Eureka控制台

img

四、配置HTTP密码验证

  • 配置这个东西是因为 我们刚才设置了注册中心 密码验证

  • 此时我们的provider 和 consumer 项目想要连接上注册中心就会报错

  • 由于spring-boot-starter-security默认开启了CSRF校验,对于client端这类非界面应用来说,有些不合适,-但是又没有配置文件的方式可以禁用,需要通过Java配置,进行禁用,如下:

  • 这样的话需要连接注册中心其他项目就可以在连接URL中配置账号和密码 就可以连接上注册中心了

1. 编写配置类 SecurityConfig

package cn.yufire.eureka.server.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
* <p>
* Description: 开启 http密码验证
* </p>
*
* @author yufire
* @version v1.0.0
* @since 2020-07-07 09:57:49
*/
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override 
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        super.configure(http);
    }

}

五、搭建Eureka集群

为什么要有集群?

因为 任何节点只有一个是不能保证服务高可用的,所以每个节点可以多有几个,这样即使一个节点挂掉了还有剩下的节点可以用

集群可以理解为:你中有我,我中有你,手拉手肩并肩,一起保证服务的健壮性 可用性

Eureka集群示意图

img


开始搭建!!

1. 创建一个文件夹 名称为 eurekas

2. 使用IDEA打开这个文件夹

3. 创建多个Module -> 选择SpringBoot -> 名称为: eureka-server-1eureka-server-2eureka-server-3

4. 添加 三个项目所需依赖 pom.xml 由于三个项目都是 EurekaServer项目 所以 三个项目的依赖都是一样的 C V 即可

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version> <!-- 注意SpringBoot版本 -->
    <relativePath/>
</parent>
<dependencies>
    <!--添加SpringBoot的Web依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--添加 Eureka的服务端依赖-->
    <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-security</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>


<!--Spring Cloud 父级依赖-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

5. 创建配置类 用来关闭HTTP CSRF安全验证 配置类名称为: SecurityConfig

和上边一样 三个项目 C V 即可

package cn.yufire.eureka.server1.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
* <p>
* Description: 开启 http密码验证
* </p>
*
* @author yufire
* @version v1.0.0
* @since 2020-07-07 09:57:49
*/
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        super.configure(http);
    }

}

6. 添加 application.yml 中的配置

以下的eureka地址 已经在本机的hosts文件中设置了映射为 127.0.0.1

  • eureka1.com
  • eureka2.com
  • eureka3.com

eureka-server-1 项目的配置

server:
  port: 8001 #服务注册中心端口号
eureka:
  instance:
    appname: eureka-server-1
    eureks2Port: 8002
    eureks3Port: 8003
  client:
    fetch-registry: false #是否检索其他注册中心
    register-with-eureka: false # 是否把自己注册到注册中心
    service-url: # 配置注册中心的地址 url
      defaultZone: http://root:root@eureka2.com:${eureka.instance.eureks2Port}/eureka/,http://root:root@eureka3.com:${eureka.instance.eureks3Port}/eureka/
  server: # 关闭自我安全检查
    enable-self-preservation: false
# 配置认证密码
spring:
  application:
    name: eureka-server-1
  security:
    user:
      name: root
      password: root

eureka-server-2项目的配置

server:
  port: 8002 #服务注册中心端口号
eureka:
  instance:
    hostname: 127.0.0.1 #服务注册中心IP地址
    appname: eureka-server-2
    eureks1Port: 8001
    eureks3Port: 8003
  client:
    fetch-registry: false #是否检索其他注册中心
    register-with-eureka: false # 是否把自己注册到注册中心
    service-url: # 配置注册中心的地址 url
      defaultZone: http://root:root@eureka1.com:${eureka.instance.eureks1Port}/eureka/,http://root:root@eureka3.com:${eureka.instance.eureks3Port}/eureka/
  server: # 关闭自我安全检查
    enable-self-preservation: false
# 配置认证密码
spring:
  application:
    name: eureka-server-2
  security:
    user:
      name: root
      password: root

eureka-server-3项目的配置

server:
  port: 8003 #服务注册中心端口号
eureka:
  instance:
    hostname: 127.0.0.1 #服务注册中心IP地址
    appname: eureka-server-3
    eureks1Port: 8001
    eureks2Port: 8002
  client:
    fetch-registry: false #是否检索其他注册中心
    register-with-eureka: false # 是否把自己注册到注册中心
    service-url: # 配置注册中心的地址 url
      defaultZone: http://root:root@eureka1.com:${eureka.instance.eureks1Port}/eureka/,http://root:root@eureka2.com:${eureka.instance.eureks2Port}/eureka/
  server: # 关闭自我安全检查
    enable-self-preservation: false
# 配置认证密码
spring:
  application:
    name: eureka-server-3
  security:
    user:
      name: root
      password: root

主要配置了 defaultZone属性中的 其他Eureka的地址 多个地址使用 ,号 隔开


7. 配置Windows的hosts文件

为什么要配置?

可以看配置文件中的defaultZone 属性中的配置 出现了eureka1.com 和 eureka2.com 和 eureka3.com

我们需要配置hosts 文件才可以正确的解析到 eureka1…3.com 的IP 地址


8. 打开 此电脑 C:\Windows\System32\drivers\etc

这个文件夹里有 一个名称为hosts 或者HOSTS 的文件 这个文件是以键值对 的方式进行配置的

9. 添加 以下内容

127.0.0.1 eureka1.com
127.0.0.1 eureka2.com
127.0.0.1 eureka3.com

10. 保存 hosts文件


11. 启动我们的三个项目

确保启动成功后打开Euraka的管理界面查看除自己意外的其他两个注册中心是否注册成功了

img

可以看到

  • Eureka1中包含了Eureka2 和 Eureka3

  • Eureka2中包含了Eureka1 和 Eureka3

  • Eureka3中包含了Eureka1 和 Eureka2

你中有我 我中有你 大家一起保证服务的高可用!

如果你出现的情况与上述不符合的话 请检查 配置文件中的defaultZone是否配置正确


六、发布服务到Eureka集群中

把我们的服务发布到注册中心其实很简单 只需要更改 defaultZone属性的值为三个注册中心的地址即可

defaultZone: http://root:root@eureka1.com:${eureks1Port}/eureka,http://root:root@eureka2.com:${eureks2Port}/eureka,http://root:root@eureka3.com:${eureks3Port}/eureka

此时可以看到 我们的服务已经成功的发布到三个注册中心了!

这时候即使挂掉了 1 个注册中心 也不会出现 无法找到服务的情况了

img

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值