微服务之间相互调用问题

RestTemplate :是一个访问Restful风格的第三方服务的 网络请求框架

使用 :  1.使用配置类配置一个RestTemplate的bean

    2.在要使用的服务中自动注入

 

Nacos:一个微服务的服务注册中心(nacos关闭后服务的链接不会失效)

 

Ribbon:一个springcloud组件,用来实现服务调用的负载均衡

 

 

 

 使用:在restTemplate 的bean上加上@LoadTemplate注解就能使用默认的均衡算法 来均衡

 

ribbon还提供了重试机制

几个参数:建立连接的超时时间(connectTimeout),处理请求的超时时间,同一实例的最大重试次数,所有其他实例(不包括第一次链接)的最大重试次数

 

OpenFeign: 一个伪http客户端,集成了 ribbon和resttemplate 

 

 

feign 中ribbon的关键属性

  OkToRetryOnAllOperations 

    :true  //所有请求都会重试 (不安全,可能会想数据库插入两个相同记录)

    :false //只有get类型,也就是查询才会出发重试机制(推荐)

  

  feign参数传递:

    get:服务调用方接口中的feign方法    传递对象的参数   前面要加@SpringQueryMap注解

    post:服务提供方 的controller中参数要加  @RequestBody

 

服务雪崩:下游的服务不可用导致上游的不可用

  

解决方案:隔离 超时 限流 熔断 降级 

 

sentinel  : 一套服务容错的综合性解决方案

  sentinel配置限流  qps ,该controller  1秒钟内可以被访问的次数

  sentinel配置熔断降级(以后请求不再执行) RT 和时间窗口  该controller执行平均时间不能超过  如(RT) 100ms  ,否则在 30s(时间窗口)内不再处理请求,

  而是抛出异常,30s后恢复

 

限流,降级等会导致被保护的controller抛出FlowException ,DegradeException等异常

  这类异常无法被普通的异常切面捕获到,需要一个实现UrlBlockHandler的类来处理该类型异常

 

 

  

posted @ 2020-08-27 23:03  java奇才  阅读(4238)  评论(1编辑  收藏  举报