SpringCloud-笔记5-中服务间两种调用方式-Feign

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud-笔记5-中服务间两种调用方式-Feign相关的知识,希望对你有一定的参考价值。

参考技术A helloWorld访问无需带参数

返回数据格式

参考文献
Spring Cloud中如何优雅的使用Feign调用接口
FeignClient注解及参数

springCloud熔断器

spring cloud 熔断器

熔断器 也叫断路器 什么是断路器 它就相当于项目中的保险丝 

当你的微服务拆分越细 模块越多 他们直接的调用就会越来越复杂

那可以想一下 如果中间有一个模块 等了五秒钟才能运行成功 

那么调用方以及调用方的对外服务都需要等五秒 但请求还在不停地进入 这就形成了一个雪崩效应

请求堆积越来越多 就会使整个分布式架构的崩溃 那么熔断器就可以解决我们的问题

它可以在依赖方调用缓慢或崩溃的情况下进入自己的回路方法

熔断器的使用

1.加入jar包

// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix
compile group: ‘org.springframework.cloud‘, name: ‘spring-cloud-starter-hystrix‘
2.在调用方的调用方法上写代码 以下是例子


@Controller
public class PageController {
public static Logger logger =LoggerFactory.getLogger(PageController.class);
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "backMethod")
@RequestMapping(value = "index")
public String toIndex(Model model){
System.out.println("进入index");
logger.info("执行了查询 开始调用PROJECT-POPPY-SOLR的服务");
String msg=restTemplate.getForEntity("http://user:user password:[email protected]/search",String.class).getBody();
logger.info("调用微服务结束");
model.addAttribute("msg",msg);
return "index";
}
public String backMethod(Model model){
System.out.println("进入回路方法");
model.addAttribute("msg","服务不可用 请稍后重试");
return "index";
}
}

在调用方的调用方法上加上@HystrixCommand(fallbackMethod="回路方法")

注意 这里回路方法的返回值以及参数必须与原方法对应 否则系统就不认为你是回路方法

在回路方法中编写自己的代码 如果方法崩溃或调用过慢 就会进入指定的回路方法 下面会演示

3.配置 


hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 7000 #请求响应时间 如果过了这个时间就会进入回路方法
circuitBreaker:
requestVolumeThreshold: 2 # 服务降级:此请求连续多少次响应过慢或崩溃 系统就默认把它当成一个崩溃的方法 在一定时间内调用此方法会直接进入回路方法 这样执行更快
                      默认值是20 请求该方法20次 如果崩溃或响应过慢率大于百分之八十 就会默认它是一个崩溃方法
      #timeout:
        #enabled: false #取消超时检查 无论线程运行多久 只要不崩溃就不进入回路方法 一般情况不使用

4启动类上加上

@EnableCircuitBreaker
我这边故意在被调用方的方法上加上线程休眠 看一下运行结果 

 

看到了这里显示不可用 说明进入了回路方法 看一下控制台

 

 

 看到了先进入了index方法 然后被调用方加载过慢 过了我们配置的七秒所以这里就进入了回路方法 

我们来试试多次连续运行 

 

看到了只进入了两次我们的index 然后就不进入了 运行直接进入回路方法

以上就是spring cloud 熔断器





































以上是关于SpringCloud-笔记5-中服务间两种调用方式-Feign的主要内容,如果未能解决你的问题,请参考以下文章

springcloud系列 eureka注册中心集群搭建 服务消费方调用提供方

应用间通信方式HTTP和RPC

SpringCloud学习笔记-p1(服务拆分&远程调用&Eureka注册中心&Ribbon负载均衡)

springCloud熔断器

SpringCloud 学习笔记总结

SpringCloud 学习笔记总结