摘要
微服务架构中,会将系统按照模块拆分为多个服务,一般都会使用服务治理工具管理各个服务。Eureka就是一种服务治理工具,本文将介绍如何使用Eureka。
参考文档:http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html
略:11.3-11.11、12.3-12.7
正文
使用Eureka时,每个服务将通过Eureka客户端注册到Eureka服务端。在Eureka服务端,我们可以看到每个注册进来的服务的运行信息。
如何搭建Eureka服务端
准备工作:新建SpringBoot项目eureka-server,仅仅加入启动方法即可。下面演示如何将该项目改造为Eureka服务端。
- 加入Eureka服务端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 启动类标记@EnableEurekaServer注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication{
public static void main(String[] args) {
new SpringApplicationBuilder(EurekaApplication.class).web(true).run(args);
}
}
最简单的Eureka服务端已经搭建完成。每个服务端都是一个客户端,最好为其配置Eureka服务端地址并关闭部分客户端功能。
- 修改配置文件
server:
port: 8761
eureka:
instance:
hostname:localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
以上配置为单一Eureka服务端配置,为了保证高可用,可以通过多个Eureka互相注册形成Eureka服务端集群。
如何包含Eureka客户端
准备工作:新建SpringBoot项目user-service,作为系统的用户服务。下面以用户服务为例,介绍如何包含Eureka客户端注册并到Eureka服务端。
- 加入Eureka客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 配置Eureka服务端地址
eureka:
client:
serverUrl:
defaultZone: http://localhost:8761/eureka/
启动程序,访问http://localhost:8761/eureka/,会发现该服务以及被Eureka客户端注册到在Eureka服务端。
Eureka客户端会将spring.application.name
和server.port
作为默认程序名、虚拟主机名、端口注册到Eureka服务端,其他实例信息通过配置eureka.instance.*
获取。
有关更多配置信息,查看类EurekaInstanceConfigBean
和EurekaClientConfigBean
。
若希望禁用Eureka客户端,配置eureka.client.enable=false
。
自我保护模式
自我保护模式的表现形式
进入自我保护模式,会在首页以红色字体输出以下内容
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
为什么要有自我保护模式
默认情况,在一定时间内未接收到某个微服务实例的心跳,会注销该实例(默认90s)。当网络分区故障时,微服务和Eureka Server无法通信,会注销本不该注销的微服务,自我保护模式可以解决该问题。
自我保护模式的具体会做什么
当前Eureka Server短时间丢失多个客户端,则该节点进入保护模式,即:保护服务注册信息,不会注销任何微服务。故障恢复后,会自动退出自我保护模式。
禁用自我保护模式
eureka.server.enable-self-preservation=false
常用配置
服务端常用配置
参数 | 默认值 | 说明 |
---|---|---|
eureka.server.enable-self-preservation | false | 是否开启自我保护模式 |
客户端常用配置
参数 | 默认值 | 说明 |
---|---|---|
eureka.instance.prefer-id-address | false | 使用ip代替hostname显示在注册中心 |
eureka.instance.lease-renewal-in-seconds | 30 | 服务续约任务间隔 |
eureka.instance.lease-expiration-duration-in-seconds | 90 | 服务失效时间 |
添加用户认证
第一步:添加spring-boot-starter-security依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
第二步:添加配置
security:
basic:
enabled: true #开启给予HTTP basic的认证
user:
name: user
password: password
注:默认账号是user,密码是随机值,在启动时打印出来。
此时浏览器访问http:ip:port/会弹出身份验证对话框。
第三步:微服务注册认证
修改client.serviceUrl.defaultZone配置即可
eureka:
serviceUrl:
defaultZone: http://user:password@ip:port/eureka/