springcloud微服务知识总结

spring cloud

1.是什么:
是一个工具集,集成多个工具,来解决微服务中的各种问题,微服务全家桶
2.不是什么:
不是一个解决单一问题的工具
3.解决了哪些问题?
远程调用RestTemplate、 负载均衡、 重试Ribbon、 降级 熔断 限流 Hystrix、
监控Hystrix Dashboard/Turbine/Sleuth/Zipkin、 配置中心 Config server

eureka

1.注册
服务提供者启动时,向eureka一次次反复注册,直到注册成功为止
2.拉去注册表
服务发现者 每30s拉取一次注册表(刷新注册表)
3.心跳
服务提供者 每30s发送一次心跳数据
eureka连续3次收不到一个服务的心跳,会删除这个服务
4.自我保护
特殊情况
如果由于网络不稳定或者中断,15分钟内,85%以上的服务会出现心跳异常,就会自动进入保护模式
在保护模式下,所有的服务都不会删除,网络恢复后,可自动退出保护模式,恢复正常
开发期间很容易达到保护模式的条件,会影响测试,在开发期间可以关闭保护模式

eureka 和zookeeper的区别

eureka---- 强调的是AP(可用性)
集群结构:对等
zookeeper---- 强调CP一致性
集群结构:主从
搭建eureka服务器
1.新建 springboot 项目
2. 添加 eureka server 依赖
3. yml配置
1.主机名
2.禁用保护模式
3.针对单台服务器,配置不向自己注册,也不从自己拉取注册表
4. 启动类注解 @EnableEurenaServer,通过注解触发自动配置

远程调用

RestTemplate

类似于HttpClient,可以发送并处理响应,建华路Rest API调用,只需要使用它的一个方法,就可以完成请求、响应、json转换
方法: getForObject(url,转换类型.class,提交的参数)
postForObject(url,协议体数据,转换类型.class)

RestTemplate和Duboo远程调用的区别

RestTemplate:http调用,效率低
Duboo:RPC调用,java序列化,效率高

Ribbon

Springcloud集成的工具,作用是负载均衡,和重试

负载均衡

Ribbon 对 RestTemplate 做了封装,增强了 RestTemplate 的功能
1 获得地址表
2. 轮询一个服务的主机地址列表
3. RestTemplate负责执行最终调用
添加负载均衡
1.ribbon依赖
2.@LoadBalanced 注解,对 RestTemplate 进行功能增强
3.修改调用地址,使用 服务id,而不是具体主机地址

Ribbon重试

一种容错机制,当远程调用服务失败,可以自动重试调用
添加重试:
1.添加 spring-retry 依赖
2.配置重试参数
1.在yml中配置
MaxAutoRetries:单台服务器的
MaxAutoRetriesNextServer:更换服务器的次数
2.在java代码中设置
ConnectTimeout:与远程服务建立网络连接的超时时间
ReadTimeout:连接已建立,请求已发送,等待响应的超时时间

Hystrix

系统容错工具
降级: 调用远程服务失败(宕机,500,超时),可以降级执行当前服务中的一段代码,向客户端返回
快速失败
熔断: 当访问量过大,出现大量失败,可以做过热保护,断开远程服务不再调用
限流
防止故障椽笔,雪崩效应

降级

1.hystrix依赖
2.启动类注解@EnableCircuitBreaker
3.添加降级代码

@HystrixCommand(fallbackMethod="方法名")
远程调用方法(){
			restTemplate.getForObejct(url, ……);
}

Hystrix超时

Hystrix熔断

短路器打开条件:
10s内20次请求
50%失败,执行了降级代码
短路器打开后,所有请求直接执行降级代码

断路器打开几秒后会进入半开状态,客户端调用会尝试向后台服务发送一次调用。如果调用成功,断路器可以自动关闭,恢复正常;如果调用仍然失败,就继续保持打开状态几秒钟

Hystrix故障监控-Hystrix Dashboard

hystrix利用Actuator 工具,来暴露Hystrix的故障日志

Actuator

springboot提供的日志监控工具,可以暴露项目中多种监控信息
健康状态
系统环境变量
spring容器中所有的对象
springMVC映射的所有路径
添加actuator
添加actuator依赖
yml配置暴露监控数据
m.e.w.e.i 暴露所有监控
m.e.w.e.i=health 只暴露健康状态
m.e.w.e.i=[]

搭建Hystrix DashBoard

仪表盘项目可以是一个完全独立的项目,与其他项目都无关,也不用向注册表注册
hystrix dashboard 依赖
@EnableHystrixDashboard
允许对哪台服务器开启监控

hystrix:
  dashboard:
    proxy-stream-allow-list: localhost

声明式客户端接口

只需要声明一个抽象接口,就可以通过接口做远程调用,不需要再使用RestTemplate来调用

//调用远程商品服务,获取订单商品列表
//通过注解配置:
//1.调用哪个服务
//2.调用服务的哪个路径
//3.想路径提交什么参数数据
@FeignClient(name="item-service")
public interface ItemClient{
	@GetMapping("/{orderId}")
	JsonResult<List<Item>> getItems(@PathVariable String orderId);
}

在这里使用@GetMapping("{orderId}"),指定的是向远程服务调用的路径

Feign集成Ribbon

0配置,以记名启用了负载均衡和重试
默认参数配置:

虚拟机

网络不稳定,经常出现问题
没有ip
没有网卡
一切正常,但是ping不通
重置VMware虚拟网络环境:
删除所有虚拟网卡,再重新创建,初始化网络
编辑-虚拟网络编辑器
点右下角"更改设置";获得管理员权限
左下角"还原默认设置按钮"

设置NAT网络网段 :192.168.64.0

编辑-虚拟网络编辑器,选择VMnet8网卡,下面的网段设置成192.168.64.0

设置centos7-1908的ip

# 在/root/主目录下准备两个脚本程序:ip-static 和 ip-dhcp
# 里面修改网卡的配置文件 /etc/sysconfig

cat ip-static
cat ip-dhcp

#动态分配ip
./ip-dhcp
ifconfig

#指定一个固定ip
./ip-static
ip:192.168.64.3

ifconfig

如果网络服务network.service服务无法启动,可能是和NetWorkManager服务冲突,可以禁用NetWorkManager

#停止NetWorkManager服务
systemctl stop NetWorkManager
#禁用NetWorkManager
systemctl disable NetWorkManager

Rabbitmq虚拟机

从centos7-1908克隆虚拟机
设置ip
./

Feign集成Hystrix

Feign默认不启用Hystrix,不推荐启用Hystrix

启用Hystrix基础配置:
Hystrix起步依赖
yml中配置hystrix
启动
添加降级代码

@FeignClient(name="item-service",fallback=降级类.class)
public interface ItemClient(){
		@GetMapping("/{orderId}")
		JsonResult<List<Item>> getItems(@PathVariable String orderId);
}

降级类需要实现声明式客户端接口,在实现的抽象方法中添加降级代码
降级类需要添加@Component

Feign集成Hystrix

		添加sctuator依赖
		暴露hystrix.stream监控断点

订单中添加Feign,调用商品和用户

1.添加依赖
feign
hystrix
2.yml
feign.hystrix.enable=true
m.e.w.e.i=hystrix.stream
3.启动类注解
@EnableFeignClients
@EnableCircuitBreaker

搭建Turbine
1.添加Turbine依赖
2.yml配置
聚合的服务id:order-service,aa,bb,cc
为聚合的监控数据命名:cluster-name=new String(“abc”)

rabbitmq

合理分发消息
1.通过回执,通知服务器消息处理完成
通过回执,服务器可以知道消费者有没有处理完消息
2.qos=1
每次只从服务器抓取一条消息,这条消息处理完成之前,不会抓取下一条
必须在手动ACK模式下qos设置才有效

消息持久化
防止服务器崩溃、重启造成消息丢失,需要把消息保存到磁盘
1.队列持久化
c.queueDeclare(“队列名”,true)
2.消息持久化
c.basicPublish("",“队列名”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值