大纲
一、单机环境
1.1 Eureka Server
1. 导入依赖
<!-- eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>3.0.3</version>
</dependency>
2. yml文件
server:
port: 7001
eureka:
instance:
# eureka服务端的实例名称
hostname: localhost
client:
# false表示不向注册中心注册自己
register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务器的实例,不需要去检索服务
fetch-registry: false
service-url:
# 设置与eureka sever交互的地址与查询服务、注册服务
defaultZone : http://${eureka.instance.hostname}:${server.port}/eureka/
3. 启动类
添加@EnableEurekaServer
注解
1.2 Eureka Cilent
1. 导入依赖
<!-- eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2. yml文件
server:
port: 80
spring:
application:
# 微服务的名称
name: cloud-consumer-order
eureka:
client:
# true表示向注册中心注册自己,默认为true
register-with-eureka: true
# 是否从EurekaServer抓取已有的注册信息,默认为true。
# 单节点无所谓,集群必须设置true才能够配合ribbon使用负载均衡
fetch-registry: true
service-url:
# 设置与eureka sever交互的地址与查询服务、注册服务
defaultZone : http://localhost:7001/eureka/
3. 启动类
添加@EnableEurekaClient
1.3 测试
浏览器输入http://localhost:7001/
;
发现 cloud-consumer-order已经注册到服务中心里面了。
二、集群环境
2.1 简介
目的:避免单个EurekaServer出现故障,导致整个服务不可用
实现:简单来说,我们就是对外就是一个大的整Eureka,里面就包含了好几台:比如说 7001,7002…。 而里面的服务就相互注册,互相守望(你注册我,我注册你)。
2.2 步骤
现在就创建 7001 与 7002。
1. 搭建集群
(1) 修改映射配置
找到 host文件:C:\Windows\System32\drivers\etc ,修改host映射配置,直接写入
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
注 :mac执行命令 sudo su 切换root账号,然后 vim /etc/hosts进入编辑页面,然后按字母i就可以编辑了,编辑完成后按esc,然后:wq就行了,最后su - 普通账户
注:win拒绝访问解决办法,点开文件属性,安全,设置Users,添加修改写入权限
(2) 修改yml文件
主要是修改hostname, defaultZone
三台的话defaultzone内容逗号分离,
service-url: defaultZoo url1,url2
- 修改7001
server:
port: 7001
eureka:
instance:
# eureka服务端的实例名称 对应host的修改
hostname: eureka7001.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
# 设置与eureka sever交互的地址与查询服务、注册服务
# 向 http://eureka7002.com:7002/eureka/ 注册
defaultZone : http://eureka7002.com:7002/eureka/
- 修改7002
server:
port: 7002
eureka:
instance:
# eureka服务端的实例名称
hostname: eureka7002.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
# 设置与eureka sever交互的地址与查询服务、注册服务
# 向 http://eureka7001.com:7001/eureka/ 注册
defaultZone : http://eureka7001.com:7001/eureka/
重启7001与7001,浏览器输入:http://eureka7002.com:7002/
,http://eureka7001.com:7001/
2. 微服务注册到集群
修改微服务的 defalutZone
三、Eureka细节修改
导入
spring-boot-starter-actuator
依赖,这是程序的监控系统,可以实现健康检查
3.1 修改实例id
3.2 访问显示IP
四、Eureka自我保护机制
如果在15分钟内,客户端节点正常的心跳比例低于85%的,也就是超过15%的客户端节点没有正常心跳才会触发自我保护机制。
目的:针对网络异常波动的安全保护措施,为了保证健壮性,高可用。
自我理解:当 Eureka 捕获到大量的心跳失败时,它不会认为是服务不行了,而是认为是网络问题,不会把服务剔除。
当出现自我保护机制时:
(1 Eureka 不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
(2 Eureka 仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
(3 当网络稳定时,当前实例新的注册信息会被同步到其它节点中
4.1 自我保护的关闭
配置 eureka.server.enable-self-preservation
来true
打开false
禁用。默认是打开。
主要是用于开发环境。开发中启动的服务数量较少而且会经常修改重启。如果开启自我保护机制,很容易触发Eureka客户端心跳占比低于85%的情况。使得Eureka不会剔除我们的服务,从而在我们访问的时候,会访问到可能已经失效的服务,导致请求失败,影响我们的开发。
eureka-server
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone : http://eureka7002.com:7002/eureka/
server:
# 关闭自我保护机制
enable-self-preservation: false
# 设置扫描失败的间隔时间,单位是毫秒,默认60s(60 * 1000),
# 每隔2s扫描一次
eviction-interval-timer-in-ms: 2000
eureka-client
server:
port: 8001
spring:
application:
# 微服务的名称
name: cloud-payment-service
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka/, http://eureka7002.com:7002/eureka/
instance:
instance-id: payment-service8001
prefer-ip-address: true
# Eureka客户端向服务端发送心跳的间隔时间,单位为s(默认30s),这里设置为1s
lease-renewal-interval-in-seconds: 1
# Eureka服务端在收到最后一次心跳后等待时间上限,单位为s(默认90s),超时将剔除服务
lease-expiration-duration-in-seconds: 2
五、总结
Eureka包含两个组件: Eureka Server和Eureka Client。
Eureka Server
启动完成之后,微服务节点向注册中心进行注册。如果默认时间90s没有收到来自Client的心跳,会这个服务节点移除。
Eureka Client
:内置的、使用轮询(round-robin)负载算法的负载均衡器。启动后,向Eureka Server发送心跳,默认周期为30秒。
key存储服务名,value存放服务地址。
上一章:chapter03:搭建子模块