spring cloud的版本
spring cloud的版本是根据springboot版本确定的
Spring Cloud
Dalston, Edgware, Finchley, and Greenwich 版本不再更新了
版本
SNAPSHOT:开发版本,最新版本
Milestone:大版本在发布前的里程碑的版本
Release candidate:RC版本,准备发布的版本
Release:发布的版本
版本选择
spring cloud:Hoxton.SR12
spring cloud netflix:2.2.9.Release
spring boot:2.3.12.Release
Eureka介绍
Eureka是Spring cloud netflix的核心组件,包含eureka server(注册中心)和eureka client(客户端)
server端提供服务注册,存储所有可用服务节点
client用于简化与server通讯复杂度
架构图:
使用
服务端
添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
在启动类上添加@EnableEurekaServer注解
yml配置(非标准配置,仅用于测试)
eureka:
instance:
#注册实例名称
hostname: localhost
#是否将自己的ip注册到eureka中,默认false 注册 主机名
prefer-ip-address: true
# Eureka客户端需要多长时间发送心跳给Eureka,表明他仍然或者,默认是30
# 通过下面方式我们可以设置,默认单位是秒
lease-renewal-interval-in-seconds: 10
# Eurkea服务器在接受到实例最后一次发送的心跳后,需要等待多久可以将次实例删除
# 默认值是90
# 通过下面方式我们可以设置,默认单位是秒
lease-expiration-duration-in-seconds: 30
client:
#是否注册到eureka服务中
register-with-eureka: false
#是否拉取其他服务
fetch-registry: false
logging:
config: classpath:logback.xml
logback.xml(用于记录日志)
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%highlight(%-5level) (%file:%line\)- %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
启动服务后,打开ip:serverport, 就可以看到eureka的信息
父pom
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
客户端
依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
启动类加注解:@EnableEurekaClient或者@EnableDiscoveryClient(更推荐)
yml
logging:
config: classpath:logback.xml
eureka:
client:
service-url:
defaultZone: http://#{serverip}:#{serverport}/eureka
服务注册、服务续约、服务下线
服务注册:client在第一次心跳时向server注册(每30s一次)
服务续约(renew):Client通过发送心跳进行续约,如果90秒内Eureka Server未收到续约,则进行服务剔除
服务下线:Client优雅退出时会发送cancel命令,Server收到cancel命令时会删除该节点
获取注册信息列表:Client会缓存由Server获取的注册表信息,会定期更新注册表信息[默认30秒],会处理注册表的合并等内容
集群
spring:
application:
name: eureka-cluster
security:
user:
name: user
password: 123456
server:
port: 1001
eureka:
instance:
hostname: eureka-1
#设置服务注册中心地址,指向另一个注册中心
client:
serviceUrl:
defaultZone: http://user:123456@eureka-2:1002/eureka/,http://user:123456@eureka-2:1003/eureka/
修改hosts文件
C:\Windows\System32\drivers\etc目录下
集群架构图
https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
Eureka Server 收不到微服务的心跳的情况
1. 微服务自身的原因
2. 微服务与 Eureka 之间的网络故障
出现网络故障,会开启自我保护模式(Eureka Server 在运行期间,会统计心跳失败的比例在 15 分钟内是否低于 85%),不删除服务,每60s进行一次扫描,当比例大于85%,会关闭自我保护模式
Eureka 还有客户端缓存功能(也就是微服务的缓存功能)。即便 Eureka 集群中所有节点都宕机失效,微服务的 Provider 和 Consumer都能正常通信。
微服务的负载均衡策略会自动剔除死亡的微服务节点。
关闭自我保护
建议在开发环境中关闭自我保护机制,在生产环境中开启自我保护机制
优雅停服
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
添加配置
management:
endpoints:
web:
exposure:
include: shutdown #暴露shutdown端点
endpoint:
shutdown:
enabled: true #再次确认暴露shutdown端点
加强eureka注册中心的安全认证
添加依赖
增加用户名密码配置
spring:
application:
name: eureka-cluster
security:
user:
name: user
password: 123456
修改defaultZone(添加用户名密码,方便集群间通信)
eureka:
instance:
hostname: eureka-1
#设置服务注册中心地址,指向另一个注册中心
client:
serviceUrl:
defaultZone: http://user:123456@eureka-2:1002/eureka/,http://user:123456@eureka-2:1003/eureka/
添加配置文件
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable(); //关闭csrf
//开启认证 若注释掉,就关闭认证了
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}
这样,再次打开eureka端页面时,就需要用户名密码验证了
Eureka迁移Nacos
1. 找到对应的spring cloud alibaba的版本
2. 修改相应的依赖
3. 修改相应的配置