Eureka是帮助我们维护所有服务的信息,以便服务之间的相互调用
并且在父工程中指定SpringCloud的版本,并且将packaging修改为pom。
<packaging>pompackaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Hoxton.SR6version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
创建springboot工程,并且导入依赖,在启动类中之间添加,编写yml配置文件。
(1) 导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
dependencies>
(2)启动类添加注解
@SpringBootApplication
@EnableEurekaServer //Eureka的注解
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
(3) 编写application.yml配置文件
server:
port: 8761 #指定服务的端口号
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false #当前的Eureka服务为单机版
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
1、创建Maven工程,修改为Springboot
2、导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
dependencies>
3、在启动类上添加注解
@SpringBootApplication
@EnableEurekaClient
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class,args);
}
}
4、编写配置文件
#指定Eureka服务地址
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
#指定服务的名称
spring:
application:
name: CUSTOMER
实现Eureka认证
1、导入依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-securityartifactId>
dependency>
2、编写配置类,过滤路径
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//忽略掉路径eureka/**
http.csrf().ignoringAntMatchers("/eureka/**");
super.configure(http);
}
}
3、编写配置文件,添加用户名和密码
#指定用户名和密码
security:
user:
name: root
password: root
4、其他服务注册到Eureka上,需要添加用户名和密码
#指定Eureka服务地址
eureka:
client:
service-url:
defaultZone: http://用户名:密码@localhost:8761/eureka
如果程序正在运行,突然Eureka宕机,会发生的情况:
(1)如果调用方已经访问过一次被调用方,Eureka宕机不会影响功能
(2)如果没用访问过,则Eureka的宕机会造成当前功能的不可用
搭建Eureka的高可用
1、准备多台Eureka服务器
2、让服务注册到多台Eureka中
3、让多台Eureka之间相互通讯
eureka:
instance:
hostname: localhost
client:
registerWithEureka: true #注册到Eureka上
fetchRegistry: true #从Eureka拉取信息
serviceUrl:
#填写另一个Eureka服务的地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
1、EurekaClient启动时,将自己的信息注册到EurekaServer上,EurekaServer中就会存储EurekaClient的注册信息。
2、当EurekaClient需要调用服务时,本地没有注册信息的缓存时,会去EurekaServer中获取注册信息。
3、EurekaClient会通过一个心跳的方式,和EurekaServer进行连接,默认30秒,EurekaClient会发送一次心跳请求,如果超过九十秒还没有发送,EurekaServer就认为该EurekaClient已经宕机了,会将该EurekaClient的信息从注册表中移除。
eureka:
instance:
hostname: localhost
#指定EurekaClient心跳请求的时间
lease-renewal-interval-in-seconds: 30 #心跳的间隔
lease-expiration-duration-in-seconds: 90 #多久没法送,就认为宕机
4、EurekaClient会每隔30秒会去EurekaServer取更新本地的注册表。
eureka:
client:
registry-fetch-interval-seconds: 30 #更新注册表的时间
5、Eureka的自我保护机制。统计15分钟内,一个服务的心跳发送比例低于85%,EurekaServer就会开启自我保护机制。
eureka:
server:
enable-self-preservation: true #开启自我保护机制
6、CAP定理。C代表一致性,A代表可用性,P代表容错性。在分布式的环境下,只能满足两个。而且分区性和容错性在分布式环境下,是必须要满足的,因此只能再AC之间权衡。