Eureka Server配置
导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
启动类上添加@EnableEurekaServer注解
@EnableEurekaServer//添加此注解
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
配置application.yml
server:
port: 8080
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
eureka.instance.hostname指定Eureka服务端的IP、域名;eureka.client.register-with-eureka是否将服务注册到Eureka服务端eureka.client.fetch-registry是否从Eureka服务端获取服务信息eureka.client.serviceUrl.defaultZone指定Eureka服务端的地址eureka.client.register-with-eureka和eureka.client.fetch-registry是区分Eureka Server和Eureka Client的关键,Eureka Server通常这两项设置为false,集群时会有所不同,下面会介绍。
效果
访问localhost:8080,注意eureka.client.serviceUrl.defaultZone配置的是客户端注册地址,而不是控制台地址。
Eureka Client配置
导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
启动类上添加@EnableEurekaClient注解
@EnableEurekaClient//添加这个注解
@SpringBootApplication
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
配置application.yml
server:
port: 8082
spring:
application:
# 服务名,后续可通过服务名访问这个服务,而不需要写具体的ip、端口
name: provider
eureka:
client:
# 客户端这两项设置为true
register-with-eureka: true
fetch-registry: true
# eureka server的注册地址
serviceUrl:
defaultZone: http://localhost:8080/eureka/
效果
访问localhost:8080,可以看到provider服务已经注册上去了
Eureka Server保护模式
我们现在把provider服务关掉,90秒后观察下控制台(默认90秒未续约就认为服务挂掉,客户端每隔30秒续约一次)
红色这句话,说明Eureka Server开启了自我保护,自我保护的作用是:当服务提供者因为网络波动等原因无法发送心跳包进行续约时,Eureka Server不会删除这个服务,而是继续保留。但此时已经无法判断服务提供者是否真的挂掉了,消费者请求这个服务很有可能会报错。
Eureka Server关闭自我保护
eureka:
server:
enable-self-preservation: false
Eureka Server集群
集群就是多个Eureka Server互相注册,形成一个集群
配置
以下两点和非集群的Eureka Server有区别
eureka.client.register-with-eureka和eureka.client.fetch-registry设置为trueeureka.client.serviceUrl.defaultZone其他注册中心的注册地址,多个注册中心用逗号分割
server:
port: 8081
spring:
application:
name: eurekaServer
eureka:
# 关闭自我保护
server:
enable-self-preservation: false
instance:
hostname: peer2
client:
# 集群模式这两项设置为true,默认就是true
#register-with-eureka: false
#fetch-registry: false
serviceUrl:
# 配置其他注册中心的注册地址,假如我们有三个注册中心,写另外两个的地址defaultZone: http://peer1:8080/eureka/,http://peer3:8082/eureka/
defaultZone: http://peer1:8080/eureka/
注意两个注册中心的eureka.instance.hostname不一样,DS Replicas才会有内容,实际部署中,注册中心一般都是在不同服务器上的
效果
访问peer1:8080或peer2:8081
Eureka Server安全认证
通过Spring Security实现
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
最简单的配置方式
在application.yml中加入以下内容,也可以在Security配置类里面拦截url进行认证
spring:
security:
user:
name: user
password: 123456
现在访问控制台需要输入账号密码,注册地址也需要携带账号密码,否则服务无法注册上去
eureka.client.serviceUrl.defaultZone的值应该为http://账号:密码@peer2:8081/eureka/
关闭CSRF
开启安全认证后,不关闭CSRF无法注册服务,但可以打开控制台
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//禁用csrf
http.csrf().disable();
super.configure(http);
}
}
其他配置
eureka.client.enabled是否启用Eureka Client trueeureka.client.register-with-eureka表示是否将自己注册到Eureka Server trueeureka.client.fetch-registry表示是否从Eureka Server获取注册的服务信息 trueeureka.client.serviceUrl.defaultZone配置Eureka Server地址,用于注册服务和获取服务 http://localhost:8761/eurekaeureka.client.registry-fetch-interval-seconds默认值为30秒,即每30秒去Eureka Server上获取服务并缓存eureka.instance.lease-renewal-interval-in-seconds向Eureka Server发送心跳的间隔时间,单位为秒,用于服务续约,默认30秒eureka.instance.lease-expiration-duration-in-seconds定义服务失效时间,即Eureka Server检测到Eureka Client木有心跳后(客户端意外下线)多少秒将其剔除默认90秒eureka.server.enable-self-preservation用于开启Eureka Server自我保护功能 trueeureka.client.instance-info-replication-interval-seconds更新实例信息的变化到Eureka服务端的间隔时间,单位为秒,默认30秒eureka.client.eureka-service-url-poll-interval-seconds轮询Eureka服务端地址更改的间隔时间,单位为秒,默认300秒eureka.instance.prefer-ip-address表示使用IP进行配置为不是域名,默认falseeureka.client.healthcheck.enabled默认Erueka Server是通过心跳来检测Eureka Client的健康状况的,通过置为true改变Eeureka Server对客户端健康检测的方式,改用Actuator的/health端点来检测。