1:SpringCloud之Eureka的使用和常见的面试题
1.1:Eureka(cp)作为springCloud注册中心,用于微服务的注册和调用
1.1.1:项目中使用: 分为服务端和客户端
1.1.1.1:服务端
pom中引入jar包:spring-cloud-starter-eureka-server
启动类添加启动注解:@EnableEurekaServer //标注这是个eureka服务端
yml文件里面配置
1.1.2.1:客户端
pom中引入jar包:spring-cloud-starter-eureka
启动类添加启动注解:@EnableEurekaClient //本服务启动后会自动注册进eureka服务中
yml文件里面配置
1.1.1.1.1:
SpringCloud之Eureka的使用和常见的面试题
问题2:已停止的微服务不注销或注销有延迟
原因:这是由于Eureka Server注销无效节点周期、自我保护模式的因素造成的,因此会出现服务不注销或注销有延迟。解决办法如下:
Eureka Server
解决方案:关闭自我保护模式,并配置注销无效节点周期时间间隔。
# 默认值为true。设为false, 关闭自我保护, 从而保证会注销微服务
eureka.server.enable-self-preservation=false
# 清理间隔(单位毫秒,默认是60 * 1000)。根据需求将时间间隔设置短些,例如:设置1秒,一旦down掉,则会立即注销
eureka.server.eviction-interval-timer-in-ms=1000
2.spring cloud微服务之间的调用 的 ribbon和feign
2.1.springcloud 提供了两种方式,一种是 Ribbon,一种是 Feign。
Ribbon 是使用 restTemplate 进行调用,并进行客户端负载均衡。
什么是客户端负载均衡呢? 在前面 注册数据微服务 里,注册了8001和8002两个微服务,
Ribbon 会从注册中心获知这个信息,然后由 Ribbon 这个客户端自己决定是调用哪个,这个就叫做客户端负载均衡。
2.2.Feign 是什么呢? Feign 是对 Ribbon的封装,调用起来更简单。。。
核电项目里面微服务调用时,报404
自定义了一个feign的拦截器,每次调feign时,添加token信息。
3.spring cloud 服务链路 zipkin
3.1.什么是服务链路
在前面的例子里,我们有两个微服务,分别是数据服务和视图服务,随着业务的增加,就会有越来越多的微服务存在,他们之间也会有更加复杂的调用关系。
这个调用关系,仅仅通过观察代码,会越来越难以识别,所以就需要通过 zipkin 服务链路追踪服务器 这个东西来用图片进行识别了。
zipkin
4.spring cloud config 把配置单独弄成微服务管理。别的微服务配置的更少,更加关注业务代码的开发。 有服务端和客户端。
config
核电项目将 spring cloud config客户端 换成了nacos 配置中心客户端
优点:更方便配置管理
注册中心nacos完整部署及与eureka区别
nacos简介以及作为注册/配置中心与Eureka、apollo的选型比较
5.Hystrix 断路器
项目里面最常用的是,在接口调用超时,或者服务挂了的时候,提供给页面一种提前编译好的结果。
Hystrix
6.网关 Zuul(第一代微服务网关),gateway (第二代微服务网关)
6.1.为何要用网关
我们现在有两种微服务,分别是数据微服务和视图微服务。
他们有可能放在不同的 ip 地址上,有可能是不同的端口。
为了访问他们,就需要记录这些地址和端口。 而地址和端口都可能会变化,这就增加了访问者的负担。
所以这个时候,我们就可以用网关来解决这个问题。
如图所示,我们只需要记住网关的地址和端口号就行了。
如果要访问数据服务,访问地址 http://ip:port/api-data/products 即可。
如果要访问视图服务,访问地址 http://ip:port/api-view/products 即可。
7.核电项目后台开发接口是按照resultful风格接口
resultful风格接口
8.核电项目的调度中心 使用xxl-job组件.定时任务
XXL-JOB快速入门
项目里面执行器,定时任务配置
分布式任务调度平台XXL-JOB搭建教程
9.核电项目里面的spring cloud oauth 。feign之间调用token传递问题。
Spring Cloud OAuth 微服务内部Token传递的源码实现解析
10.项目里面配置自己的仓库
pom.xml里面配置的,每个项目都需要配置。为了简单起来,只配置一次 配置在了setting.xml里面。
核电的私服,使用Maven管理器Nexus 来管理jar包。
自己动手搭建Nexus
11:消息队列学习
核电:rabbitMQ
学习地址
12:分布式事务-核电是基于rabbitMQ 实现事务最终一致性。
学习视频
Java微服务下的分布式事务介绍及其解决方案
一:定义
本地事务:数据库控制的事务
分布式事务:分布式系统环境下由不同系统之间通过网络远程协作完成事务。用本地事务是解决不了的。
比如:
A系统执行成功,远程调用B系统,B系统数据库成功,但是远程调用超时,所以A系统回滚,B系统成功了。不符合最终事务一致性。
二:分布式事务产生的场景
分布式事务的基础理论
CAP理论:
数据库读写分类:降低数据库的压力
cap 组合
ap可用性,分区容忍性 ,cp一致性,分区容忍性
是分布式
ca不是分布式
2:BASE理论
3.分布式系统的解决方案
第一种: 两阶段提交
2pc解决方案
缺点
缺点:
seata
第二种:TCC
什么是tcc
tcc-解决方案
tcc与2pc的对比
第三种:消息最终一致性