SpringCloud学习笔记

SpringCloud

 

一.SpringCloud定义

分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,速成微服务全家桶

Spring cloud和spring boot的区别:spring boot是一种框架技术,spring cloud是一种分布式系统的解决方案(集成各种技术)

二、微服务处理流程

 

三、springCloud的技术栈

 

Cloud技术集成

 

Springboot和springCloud的版本选择

依赖关系:start.spring.io/actuator(json格式串)

 

本次开发版本

 

Dependencies he dependencyManagement的区别

dependencyManagement放在父类的pom中,设置后,子项目引入依赖不需要指定版本号,默认和父类版本号相同

 

Postman:模拟浏览器发送请求软件

 

微服务项目之间的调用:restTemplate (spring内嵌)

restTemplate:包含请求对象,请求地址,

restTemplate.postForObject(ip,url,obj,*.class)//写操作

restTemplate.getForObject(ip,url,obj,*.class)//读操作

 

五、服务注册和发现

一、Eureka-已停更(AP:高可用性)

eureka:两个组件

1:eureka server提供服务注册服务(@EnableEurekaServer)

2:eurekaClient通过注册中心进行访问(@EnableEurekaClient)

Eureka集群:互相注册,相互守望

Yml文件:eureka集群间互相注册

Service-url:

defaultZone:需要守望的其他集群url,多个使用,隔开

读取application.xml 中的内容

如server

Port:8081

@value({server.port})

Private String port;

 

当服务消费者访问服务提供者时,不直接访问服务提供者,而是访问eureka集群, 此时 服务消费者不关心服务提供者的ip和端口号,只认服务提供者在eureka 集群上注册的服务名(多个服务提供者注册相同服务名)

 

自我保护机制:当某一时刻微服务不可用,eureka不会立即清理,依旧会对该服务进 行保存一定时间(默认开启)--AP的原理在此

Server:

enable-self-preservation=true;//默认为true

Eviction-interval-time:2000;//默认90s

二、Zookeeper(CP:强一致性)

微服务和zookeeper打交道

Main启动类:@EnableDiscoverClient

Zookeeper是将服务作为临时节点,如果多次发送心跳没有回应,就会把微服务从给自己的节点中T掉

三、Consul(CP:强一致性)

 

 

 

 

六、负载均衡+服务调用

一Ribbon负载均衡-维护模式

作用:负载均衡+restTemplate服务调用

Ribbon:@LoadBalanced

默认轮训负载机制

 

三、Nginx和Ribbon的负载均衡区别

Nginx为服务端负载均衡,承接所有客户端请求后做请求派发

Ribbon为本地负载均衡,在调用服务器接口的时候会在注册中心上获取服务列表,缓存到JVM本地,从而在本地实现RPC远程服务调用技术(消费端获取注册中心<euraka>服务列表)

 

四、OpenFeign

类似RMI调用(客户端创建和服务端相同的接口,并用Feign注释)

内置Ribbon包

微服务调用接口+@FeignClient

客户端注释:

启动类:@EnableFeignClient //激活feign

Service:@FeignClient(value=”要调用的微服务名称”)//调用

Feigin自带Ribbon包,所以自带负载均衡功能

 

超时设置:比如A调用B微服务,B服务需要处理3s,但是A等1S就会报超时错误, 不再等待(openfeign-ribbon客户端默认等待时间),此时需要额外设定。

Yml文件ribbon:   ReadTimeout:5000 / ConnctTimeout:5000

 

日志打印功能:

Openfeign自带,用来跟踪feign的调用跟踪

·Yml文件配置: logging:level:com.xxxx.xxService:debug//打印类型

·新建FeignConfig类指定打印级别

1.类注释 @Configuration

2.@Bean

      Logger.level feignLoggerLevel(){

Return Logger.Level.FULL;

}

 

七、服务降级

一、Hystrix(熔断器/断路器)-停更

服务降级:当对方系统不可用的时候,需要一个妥协的返回方法(比如返回默认值)

服务熔断:当对方系统没办法用之后,直接拒绝访问,调用服务降级

          当失败率达到设定值的时候,认为服务器故障,启动熔断机制,当再有   请求时,直接调用服务降级后的方法,不论请求是否正常(隔一段时间会       监测一次,如果成功率上升,再恢复调用链)

熔断类型:熔断,半熔断(部分请求进入,测试服务是否正常),关闭熔断

 

服务限流:当服务量请求量过大,限制其访问频率,避免系统卡死

Hystrix:服务端和客户端都有用,一般是用在客户端

降级配置:

启动类: @EnableHystrix

业务类添注解:

@HystrixCommoand(fallbackMethod=methodNamecommandProperties{

@HystriProperty(name=execution.ioslation.thread.timeoutInmolliseconds,value=3000)//意思为设置该方法的超时时间,如果超时了,当成异常

})//新增一个名为methodNamed 的兜底方法,当异常时,调用此方法

 

如果方法只有@HystrixCommoand() ,类名添加

DefaultProperties(defaultFallback=methodName),表示使用默认妥协方法

 

Hystrix工作流程

  1. Construct a HystrixCommand or HystrixObservableCommand Object
  2. Execute the Command
  3. Is the Response Cached?
  4. Is the Circuit Open?
  5. Is the Thread Pool/Queue/Semaphore Full?
  6. HystrixObservableCommand.construct() or HystrixCommand.run()
  7. Calculate Circuit Health//计算错误率,返回给断路器,用来影响断路器的状态
  8. Get the Fallback
  9. Return the Successful Response

 

 

 

 

Hystrix监控工具-HystrixDashBoard

 

八、服务网关

定义:对所有网络请求进行的一个关口检查,所以请求都要先经过它

作用:反向代理、健全、流量控制,熔断,日志监控等等。。。

Springcloud GateWay

定义:Spring Cloud Gateway使用的 Webflux中的 reactor-netty响应式编程组件,底层使用了 Netty通讯框架

 

和zuul区别

Zuul阻塞架构

Zuul基于java开发,jvm第一次加载慢,导致性能弱

路由(转发url

配置-两种方法

1:yaml配置

Predicates属性(符合条件才会映射生效)

After :时间  //代表当前时间后生效

Between: xxx   到 xx时间内生效

Cookie: cookieName,正则表达式 //当带有cookie,且值符合正则,才通过

Header: //当报文头含有规定内容,才通过映射

Method:GET/POST  //get请求才通过映射

Query:userName,\d+  //带查询条件,且username符合正则表达式,映射通过

 

 

2.代码配置

 

 

 

过滤功能

自定义过滤器

实现GlobalFiter , Ordered

Ordered:加载优先级大小//return 0优先级最高

GlobalFiter

 

 

服务配置

SpringCloud Config

配置:yml文件

Spring:cloud:config:servier:git uri:xxxxx.git//地址

Uri规则 ip/分支名/xxx.yml

  分支名不写默认master 也可以在uri同等级添加labels:分支名 //指定分支名

启动类 @EnableConfigServer

Application.yml 是用户级资源配置项

Bootstrap.yml 是系统级配置,优先级更高

 

自动刷新

配置类修改后,客户端不会自动刷新--需要一个自我监控的功能

  1. Pom引入actuator监控
  2. Yml暴露监控端口

management:

  endpoints:

    web:

      exposure:

        include: "*"

  1. ConfigController添加注解 @RefreshScope

 

4.需要运维工程师发一个post请求给项目,去刷新配置

Url:curl -X “hppt://localhost:3355/actuator/refresh”

 

SpringCloud Bus 消息总线

Config修改后,需要手动发送post请求,让客户端刷新配置

如何实现全自动刷新?

Bus配合config实现配置自动刷新

实现原理:Bus和消息中间件rabbitMQ整合,服务端实例读取消息主题后,刷新从远程 git读取的config文件。客户端订阅服务端rabbitMQ,当服务端更新完config配置(维护手工发送curl给服务端 xxx/bus/rabbitMQ),由于客户端订阅了服务端消息队列。所以也能收到刷新配置的请求,自我刷新。完成刷新服务端,全局项目都刷新的功能

服务端Yml添加rabbitMQ配置

客户端也要添加bus的支持

此时只需要发curl给服务端就可以,由服务端影响其他客户端项目

 

消息驱动

SpingCloud Stream--构建构建驱动微服务的框架

解决痛点:当系统中有多种MQ技术,会造成切换,开发维护的压力变大。。。Springcloud stream就是为了屏蔽中间件的差异、细节。。。类似hibernate是数据库的封装一样,不需要关注数据库的种类

 

  1. pom添加stream-rabbitMQ包
  2. Yaml 添加stream:binders:xxxxx
  3.  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值