一,Eureka介绍

注册服务中心

flowchart TD
C[服务消费者] --发现-->  E[Eureka]
P[服务提供者] --注册 --> E[Eureka]

服务消费者 和 服务提供者 都属于 Eureka客户端。
Eureka 就是Eureka服务端。

作用

  • 类似于114查号台的作用, Eureka就是114查号台, 服务提供者就是商家,服务消费者就是别的商家或消费者,服务提供者将信息登记到114,服务消费者会去114查询商家的联系方式。

二,搭建Server端(eureka)

具体步骤如下:

1. 添加依赖

在pom中添加依赖

<!--eureka服务依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2. 按开关

//放在启动类上方
@EnableEurekaServer

3. 加配置

#顶格放
eureka:
  instance:
    ip-address: 127.0.0.1
    prefer-ip-address: true
  server:
    enable-self-preservation: false #是否开启自我保护,防止网络分区故障时删掉微服务
  client:
    fetch-registry: false #是否从注册中心获取注册表
    register-with-eureka: false #是否要注册到注册中心

二,搭建Client端(house,contract等)

搭建步骤:

1.添加依赖

<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-client</artifactId>
</dependency>

2.按开关

//放在启动类上方
@EnableEurekaClient

3.加配置

#顶格放
eureka:
  instance:
    prefer-ip-address: true # 优先使用ip地址
    ip-address: 127.0.0.1 # 使用这个ip
#    instance-id: user # 显示实例名称
  client:
    register-with-eureka: true # 注册到eureka
    fetch_registry: true #从服务器获取注册信息
    service-url:
      defaultZone: http://localhost:8761/eureka/ # 注册中心地址

三,搭建eureka集群

当只有一个Eureka服务的时候,如果这个服务宕机,就会导致整个系统崩溃,所以需要搭建一个Eureka服务集群,提高服务的稳定性。

1. 添加配置文件

假设我们要创建两个服务的集群,则先创建两个配置文件,如下:

  • application-01.yml
  • application-02.yml

然后修改配置中的eureka的配置,修改后如下所示

eureka:
  instance:
    ip-address: 127.0.0.1
    prefer-ip-address: true
  server:
    enable-self-preservation: false #是否开启自我保护,防止网络分区故障时删掉微服务
  client:
    fetch-registry: true #是否从注册中心获取注册表; 这里需要获取,所以改为true
    register-with-eureka: true #是否要注册到注册中心; 需要注册到注册中心,所以改为true
    service-url:
      defaultZone: http://localhost:8762/eureka/,http://localhost:8761/eureka/ #两个服务互相指向对方

修改idea的运行配置文件

在IDEA中配置启动入口时,指定要使用的配置文件,例如下面的配置指定使用application-01.yml配置文件。

idea-edit-configuration

四,用security保护 eureka

任何用户都可以访问Eureka服务会有安全性隐患,所以一般会在Eureka服务端添加安全保护措施。

加依赖

在Eureka服务的pom中添加依赖。

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

配置文件中添加用户名和密码

在Eureka的application.yml文件中添加security配置

spring:
  application:
    name: eureka
  security: # 一定要注意对齐关系,security和application平级
    user: # 指定spring security的登录
      name: admin
      password: 123456

添加安全设置

在Eureka服务中添加以下配置类,放开向eureka的注册请求。

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //csrf -> Cross-Site Request Forgery  跨站请求伪造
        http.csrf().ignoringAntMatchers("/eureka/**"); //ignore是忽略的意思
        super.configure(http);
    }
}

Eureka客户端添加认证信息

格式: 用户名:密码@url

defaultZone: http://macro:123456@localhost:8761/eureka # 注册中心地址

注意,无论是我们示例中的house,contract还是eureka服务本身,只要他想向被security保护的eureka服务端注册都需要带上上面的用户名和密码配置。

其它eureka常用配置


eureka:
  client:
    register-with-eureka: true #是否将自己注册到eureka服务
    fetch-registry: true  #是否从eureka服务获取注册信息
    service-url:
      defaultZone: http://localhost:8761/eureka/  #服务地址,逗号分隔
    registry-fetch-interval-seconds: 30  #多久去服务端取一次注册信息
  instance:
    lease-renewal-interval-in-seconds: 30 #续约间隔,秒
    lease-expiration-duration-in-seconds: 90 #过期间隔 ,秒
    prefer-ip-address: true  #优先使用ip地址而非主机名称
    ip-address: 127.0.0.1
  server:
    enable-self-preservaation: false  #开启自我保护
### 打开services面板

打开service窗口:

查看运行的服务

五、常见错误:

  1. 添加security配置时,security和application没有上下对齐。