spingCloud服务注册与发现Eureka

简介

目标

  1. 使用eureka创建一个注册中心,并且创建eureka客户端注入道注册中心
  2. 搭建eureka注册中心集群
  3. 给eureka注册中心添加认证

eureka介绍

在微服务架构中往往会有一个注册中心,每个微服务都会向注册中心去注册自己的地址及端口信息,注册中心维护着服务名称与服务实例的对应关系。每个微服务都会定时从注册中心获取服务列表,同时汇报自己的运行情况,这样当有的服务需要调用其他服务时,就可以从自己获取到的服务列表中获取实例地址进行调用,Eureka实现了这套服务注册与发现机制。

创建父工程

创建父工程springcloud_eureka

  • 打开软件idea,新建项目->左侧选择Spring Initializr 后选择jdk的版本。
  • 配置项目信息,注意Type要选择Maven POM,选择project的话,它会帮你生成整个完整的工程结构;选择pom的话,它只会在工程目录下生成pom.xml,而没有src等等结构。
  • 不选择依赖,直接下一步完成

服务端

在父工程下面创建eureka_server模块

  • 在项目上右键>New>Module, 配置Group要跟最外层的一样,前面创建跟之前的一样,Type选择Maven Project.

  • 添加依赖Spring Cloud Discovery -> Eureka Server 依赖

  • 安装位置:在父工程目录下新建一个server文件夹

100

101

修改启动类

修改EurekaServerApplication启动类

在启动类上添加@EnableEurekaServer注解来启用Euerka注册中心功能

修改配置文件

在配置文件application.yml中添加Eureka注册中心的配置

server:
  #指定运行端口
  port: 8080
spring:
  application:
    # 指定服务名称
    name: eureka_server

eureka:
  instance:
    # 指定主机地址
    hostname: localhost
  client:
    #指定是否要从注册中心获取服务(注册中心不需要开启)
    fetch-registry: false
    #指定是否要注册到注册中心(注册中心不需要开启)
    register-with-eureka: false
  server:
    #关闭保护模式
    enable-self-preservation: false

注意:配置文件中使用中文注解需要把编码格式设置为utf-8

运行

运行程序并访问http://127.0.0.1:8080/

102

客户端

在父工程下面创建eureka_client模块

  • 在项目上右键>New>Module, 配置Group要跟最外层的一样,前面创建跟之前的一样,Type选择Maven Project.
  • 添加依赖Spring Cloud Discovery -> Eureka Discover Client 以及 Web->Spring Web
  • 安装位置:在父工程目录下新建一个client文件夹

如果按上面步骤就会自动在pom.xml中添加依赖

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

修改启动类

在启动类上添加@EnableDiscoveryClient注解表明是一个Eureka客户端

修改配置文件

server:
  # 运行端口号
  port: 8081

spring:
  application:
    # 服务名称
    name: eureka_client

eureka:
  client:
    #注册到Eureka的注册中心
    register-with-eureka: true
    #获取注册实例列表
    fetch-registry: true
    service-url:
      #要连接的配置注册中心地址注意:和http之间有空格
      defaultZone: http://localhost:8080/eureka/

运行

运行服务端的同时运行客户端

还是访问刚刚的注册服务端地址

103

注册中心集群

由于所有服务都会注册到注册中心去,服务之间的调用都是通过从注册中心获取的服务列表来调用,注册中心一旦宕机,所有服务调用都会出现问题。所以我们需要多个注册中心组成集群来提供服务。

创建server_1 ,server_2

前面单机的时候 eureka注册中心实例名称 是localhost,现在是集群,不能三个实例都是localhost,需要三个不同的域名,为了测试,我们直接配置本机hosts,来实现本机域名映射;

找到 C:\Windows\System32\drivers\etc 打开hosts,加配置

127.0.0.1  xzw1.com
127.0.0.1  xzw2.com

按照服务端创建流程分别再创建server_1,server_2两个模块,并修改这两个模块的配置文件

server1 配置文件

server:
  #指定运行端口
  port: 8881
spring:
  application:
    # 指定服务名称
    name: eureka_server

eureka:
  instance:
    # 指定主机地址
    hostname: xzw1.com
  client:
    #指定是否要从注册中心获取服务(注册中心不需要开启)
    fetch-registry: true
    #指定是否要注册到注册中心(注册中心不需要开启)
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:8080/eureka/,http://xzw2.com:8882/eureka/
  server:
    #关闭保护模式
    enable-self-preservation: false

server2 配置文件

server:
  #指定运行端口
  port: 8882
spring:
  application:
    # 指定服务名称
    name: eureka_server

eureka:
  instance:
    # 指定主机地址
    hostname: xzw2.com
  client:
    #指定是否要从注册中心获取服务(注册中心不需要开启)
    fetch-registry: true
    #指定是否要注册到注册中心(注册中心不需要开启)
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:8080/eureka/,http://xzw1.com:8881/eureka/
  server:
    #关闭保护模式
    enable-self-preservation: false

修改server配置文件

在配置项eureka.client下面添加

    #指定是否要从注册中心获取服务(注册中心不需要开启)
    fetch-registry: true
    #指定是否要注册到注册中心(注册中心不需要开启)
    register-with-eureka: true
    service-url:
      defaultZone: http://xzw2.com:8882/eureka/,http://xzw1.com:8881/eureka/

register-with-eureka和fetch-registry要设置为true,这样才能相互注册

修改client配置文件

修改Eureka-client配置文件,让其连接到集群,即同时注册到这几个中心

修改defaultZone

defaultZone: http://localhost:8080/eureka/,http://xzw1.com:8881/eureka/,http://xzw:123@xzw2.com:8882/eureka/

运行

运行所有注册中心和客户端,会发现任意一个注册中心都可以获取到其他注册中心的信息以及客户端的信息

104

安全认证

下面我们给server2 添加一个安全认证

添加依赖

在server2中的pom.xml添加依赖

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

修改配置文件

配置登录注册中心的用户名和密码。

spring:
  application:
    name: eureka_server
  security: #配置SpringSecurity登录用户名和密码
    user:
      name: xzw
      password: 123

新建WebSecurityConfig

默认情况下添加SpringSecurity依赖的应用每个请求都需要添加CSRF token才能访问,Eureka客户端注册时并不会添加,所以需要配置/eureka/**路径不需要CSRF token。

新建config文件夹,在这个文件夹下新建WebSecurityConfig类

package indi.xzw.eureka_server_2.config;

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;

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(http);
    }

}

运行

再访问http://127.0.0.1:8882/,需要用户名和密码

105

client注册

配置文件中需要修改注册中心地址格式

http://${username}:${password}@${hostname}:${port}/eureka/

这里我们把client,server1 ,server配置文件中的http://xzw2.com:8882/eureka/改为

http://xzw:123@xzw2.com:8882/eureka/

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×