1.Eureka简介
Eureka是Spring Cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)和P(分区容错性)。
Eureka是Netflix中的一个开源框架。它和 Zookeeper、Consul一样,都是用于服务注册管理的,同样,Spring-Cloud 还集成了Zookeeper和Consul。
一个Eureka中分为Eureka Server和EurekaClient
Eureka Server
提供服务注册与发现服务
Eureka Client
Service Provider 服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到;
Service Consumer服务消费方,从Eureka获取注册服务列表,从而能够消费服务。
2.使用Eureka实现注册中心
首先新建一个微服务的项目,建立一个空的项目文件夹
1)当你建一个项目之后需要,在idea中配置如下配置
2)新建一个Module项目
3)修改配置文件pom.xml的配置,修改里面的版本号
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.micro</groupId>
<artifactId>demo-eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo-eureka-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
4)在启动类上加上注解@EnableEurekaServer,这个注解是启动我们注册服务中心
5)在application中.yml中添加配置信息
server:
port: 7706
#自己给自己的服务起名字
spring:
application:
name: register-center
security:
user:
name: root
password: root
eureka:
instance:
hostname: localhost
client:
fetch-registry: false #自己就是注册中心,职责是服务的注册与发现,不需要向注册进来的服务器发请求/??????
register-with-eureka: false #自己就是注册中心,不需要向自己注册自己
service-url: #向外暴露自己IP,端口,注册的请求路径
defaultZone: http://192.168.2.220:7707/eureka/,http://127.0.0.1:7708/eureka/
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
enable-self-preservation: true #启用自我i保护
eviction-interval-timer-in-ms: 5000
3.Eureka的自我保护机制
1)在默认配置中,Eureka Server在默认90s没有得到客户端的心跳则注销该实例,
2)但是往往因为微服务跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,但是因为网络分区故障时,Eureka Server注销服务实例则会让大部分微服务不可用,这很危险,因为服务明明没有问题。
3)为了解决这个问题,Eureka 有自我保护机制。
4)它的原理是,当Eureka Server节点在短时间内丢失过多的客户端时(可能发送了网络故障),那么这个节点将进入自我保护模式,不再注销任何微服务,当网络故障回复后,该节点会自动退出自我保护模式。
4.Eureka的集群配置
1)在分布式系统中,任何的地方存在单点,整个体系就不是高可用的,Eureka 也一样,而是以集群的方式对外提供服务。
2)如果单机版本Eureka服务端宕机,会导致所有服务都无法获取使用,为了保证高可用性,我们需要搭建Eureka集群
1) Eureka Server同时也可以是Eureka Client,当有多个节点时,如上图1d,1e,1c之间的Eureka Server通过互相复制来同步自己的服务注册表。
2) Eureka Client也会缓存服务注册表中的信息,这样不用每次请求都查询Eureka Server,降低Eureka Server的压力,即使所有Eureka Server都宕机了,消费者仍然可以根据缓存来完成调用。
5.实现Eureka的集群配置
1)复制单机版的项目为cluster-eureka-server的Spring Boot项目
2) 添加配置信息
在这里面最重要的就是server的端口号不一样,然后就是下面代码中的name值要一样,然后就是要修改defaultZone的值将端口号修改为对方服务器的端口号
#自己给自己的服务起名字
spring:
application:
name: register-center
还有就是多个服务互联,大于两个的话,只需要在application.yml中做如下配置就好
defaultZone: http://192.168.2.220:7707/eureka/,http://127.0.0.1:7708/eureka/
3)启动项目(项目结构如下)
6.实现集群版注册中心
需求说明
实现集群版注册中心
运行Eureka Server服务,并访问主页
7.修改windows系统中的hosts文件
1)修改C:\Windows\System32\drivers\etc下的hosts文件
2)在文件中添加如下的内容:
9)为Eureka Server添加用户认证(也就是说进入这些独立的服务器集群需要用户名和密码的认证,否则无法进入)
1)添加依赖
2)添加配置信息
pplication.yml
spring.security.user.name #认证用户名
spring.security.user.password #认证密码
3)在启动类中添加放行代码
public class DemoEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(DemoEurekaServerApplication.class, args);
}
@EnableWebSecurity
static class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
super.configure(http);
}
}
}
4)启动服务,出现登录页面