SpringCloud速通笔记

  • 基础支持
    • 常用组合:cloud+Feign;Alibaba+feign;
    • 单一服务拆分的原则,不要重复编写服务;
    • 不同服务之间通过网络进行访问,Spring提供的方法是RestTemplate,其中包含了请求的方式,提供url路径和返回值的类型,将会完成类型的自动转换;
    • Bean的注入只能书写在配置类里边;
    • 一个服务可以是服务提供者也可以是消费者
  • Eureka
    • Eureka注册中心,每一个服务都在其上进行注册,每隔30s进行一次注册(心跳检测),当需要获取服务的时候,向Eureka按照名称进行获取,当有多个同名服务时。通过负载均衡进行服务器的选择;
    • EurekaServer需要引入eureka-server依赖;Eureka也是一个服务,所以也需要写上自己的配置;(一般包含,端口,服务的名称,地址信息),注意要在启动类上添加@EnableEurekaServer的启动注解;
    • 一个服务注册到Eureka上需要先引入依赖(eureka-client),然后在配置文件中引入Eureka的地址,编写服务的名称;
    • 服务的发现与拉取:(1)在消费者中将访问的url修改为注册好的服务名称,(2)@LoadBalance 负载均衡的注解
  • Ribbon负载均衡
    • 因为通过服务名进行的访问,所以需要通过中间处理来解析出真正的地址,这里就是我们Ribbon发挥的时候了
    • 作用:(1)拦截请求(2)返回服务列表(3)进行选择,轮询出最佳的服务提供者
    • 通过LoadBalance进行标记;
    • 负载均衡的规则通过IRule进行定义
    • 配置负载均衡的两种方式,都hi在服务端进行操作:(1)在OrderApplication中通过注入Bean定义一个新的Irule;(2)在yml中修改配置文件;
    • Ribbon默认是懒加载,在第一次启动的时候,将会拉取一整个服务列表,将会消耗大量的时间,可以在配置中进行配置,设置为饥饿加载将会节约大量的时间
  • Nacos
    • 集合了注册中心、配置中心、等核心功能
    • 注册中心
      • (1)先在父工程中引入alibaba的依赖,用于管理后续的版本(2)注释掉原生的Eureka依赖(3)添加nacos客户端的依赖,(4)在服务提供者中使用nacos的地址(5)启动!
    • 集群
      • 服务分级模型:服务-->集群-->实例
      • 设置实例的集群属性,在yml文件中添加对应属性;
      • 在进行访问的时候,应该要优先访问本集群提供的服务,此时要修改负载均衡的配置规则,使用alibaba的nacos规则进行替代;将会在本集群中按照随机的方式进行访问;
      • 当本地集群没有健康实例的时候,将会进行跨境访问,并返回警告信息;
    • 进行不同权重的配置可以进行不同性能的设备的访问频率,优化访问效率;访问的占比通过0-1进行内容的选择;
    • 权重为0的应用场景是应用平滑升级;
    • 环境隔离-namespace,也是一种划分方式,划分不同的明明空间需要在服务的配置中进行修改,注意不同的namespace拥有唯一的id,而不同的namespace下的服务是不可见的;
    • nacos中额实例会划分为临时实例和非临时实例,对于临时的,检测心跳,不健康时进行剔除;对于非临时,会主动询问,并且不健康后会等待其恢复健康;是否是临时实例可以通过配置文件进行配置,非临时实例将会对服务器造成较大压力;
    • 配置中心
      • 配置的热更新,
      • 流程:项目启动---通过bootstrap.yml文件加载nocas的地址---读取nocal中的配置文件---读取本地的配置文件---创建spring容器---加载bean;
      • 操作:(1)引入nacos的配置管理客户端依赖(2)在userservice的resource目录中田间bootstrap.yml为文件,这是一个引导文件,优先级高于application.yml,其中应该包含服务名称,开发环境以及文件后缀,组合为配置额名称,然后去nocas中寻找;
      • Nocas中的配置文件变更后,微服务可以实现热启动,可以进行如下配置:方法一,在value注入的变量所在的类上添加注解@RefreshScope。方法二,dangw
      • 在DataId中填写唯一的标识id,选择yaml的配置格式,在配置内容中,配置有需要热更新需求的配置文件;
  • Feign
    • 申明式的http请求工具
    • 定义一个Feign客户端的过程和定义一个controller的步骤是一样,这里定义的是一个接口;
    • 步骤:(1)引入依赖(2)在启动各类中加入@EnableFeignClients的注解从而开启Feign的功能;(3)编写一个Feign的声明客户端,其中应该包含,服务的名称,请求方式,请求路径,请求参数,返回值的类型;
    • Feign可以运行自定义的配置来覆盖默认配置;包含修改日志级别Logger.Level,响应结果的解析器coder.Decoder,请求参数的编码coder.Encode,支持的注解格式,失败重试机制;
    • 配置覆盖有两种方式,(1)在配置中进行设置,设置的时候,选择defult将会全局生效,选择某一个服务将会只对某一个服务生效;(2)在java代码中进行配置,先写一个Bean,之后进行引入,如果进行局部(也就是某一个服务)配置,在Feign注解中设置,如果进行全局配置,则写在EnableFeign注解中;
    • 性能优化(1)引入HttpClient依赖,进行配置(目的是引入连接池,对URLConnection进行替代,从而降低对于连接创建的依赖);(2)
  • GateWay
    • 功能:身份认证,权限校验,服务路由,负载均衡。请求限流;
    • 是响应式编程,基于WebFlux,性能更佳;
    • 搭建步骤:(1)创建Moudle,引入SpringCloudGateWay和nacos的服务发现依赖;(2)编写路由配置以及nacos地址,注意,因为GateWay本身也是一个微服务,所以需要自己的配置,另外因为要进行路由的转发,所以还需要添加一个routes的路由网关配置(id,uri,predicates断言,filrer过滤器);(3)之后每次请求都对刚刚声明的GateWay进行访问;
    • 断言工厂有很多的断言规则,常用的是path,ip等等
    • Filer形成的过滤器链对请求或者响应进行各种各样的过滤或者添加操作;添加在某一个路由之下,是对某一个路由进行过滤,添加在路由器链之下,是对所有的路由都生效,defultFilter;
    • 全局过滤器
      • GlobalFilter,作用也是完成内容的过滤,但是其支持自己的代码实现,拥有更高的自由度,通过实现GlobalFiler接口实现定义;
      • 步骤(1)编写一个类实现GlobalFilter接口;(2)代码实现,获取请求参数--获取需要过滤的参数---进行判定---根据结果拦截或者放行;(3)注意设置优先级,通过Order注解或者实现Order接口
    • 过滤器的执行顺序,在得知请求的路由之后,会将当三种过滤器合并为一个集合,通过order进行排序后形成一个过滤器链(order越小优先级越高,GlobalFilter自定义,defulter和路由过滤器从1开始自排序),当order一样的时候,defulter>路由过滤器>GlobalFilter;
  • 跨域访问
    • 浏览器禁止请求的发起者与服务端发生跨域Ajax请求;
    • 解决方法是CORS方法进行解决,询问一下浏览器能不能访问,设置add-to-simple-url-handler-mapping为true,可以解决这次询问被GateWay拦截的问题;设置allowCredentials为true可以解决cookie携带的问题;因为每次请求都询问服务器,压力大增,所以可以通过maxAge来设置允许时间,在该时间范围内都不会在进行询问;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值