SpringCloud(五)之Spring Cloud 中 Feign结合Hystrix断路器开发实战
1.先讲hystrx(断路器) 在springcloub 中的使用
1.1 加入依赖
注意:网上新旧版本问题,所以要以官网为主,不然部分注解会丢失
最新版本 2.0
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
1.2 增加注解
启动类里面增加注解
@EnableCircuitBreaker
@SpringBootApplication
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrixDashboard
public class OrderServiceApplication { public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
} }
1.3 API接口编码实战(下面就是熔断降级服务异常报警通知实战)
熔断-》降级
1)最外层api使用(比如:controller上面),好比异常处理(网络异常,参数或者内部调用问题,报警)
api方法上增加 @HystrixCommand(fallbackMethod = "saveOrderFail")
编写fallback方法实现,方法签名一定要和api方法签名一致(注意点!!!)
@RestController
@RequestMapping("api/v1/order")
public class OrderController { @Autowired
private ProductOrderService productOrderService;
@Autowired
private StringRedisTemplate stringRedisTemplate; @RequestMapping("save")
@HystrixCommand(fallbackMethod = "saveFallback")
public Object save(@RequestParam("user_id")int userId, @RequestParam("product_id") int productId,HttpServletRequest request){
if (userId==1){
return "123";
}
Map<String, Object> msg = new HashMap<>();
msg.put("code", -1);
msg.put("msg", productOrderService.save(userId, productId));
return msg;
}
/***
* @Description: save 方法出现异常,Hystrix 熔断之后回调方法
* 该参数的参数要和目标方法参数一致
* @Param: [userId, productId]
* @return: java.lang.Object
* @author: wangbs
* @create: 2019/2/19 9:07
*/
public Object saveFallback(@RequestParam("user_id")int userId, @RequestParam("product_id") int productId,HttpServletRequest request){
//模拟发短信信息进行提醒发生了错误信息
String saveOrderKye = stringRedisTemplate.opsForValue().get("saveOrderKye");
//进行报警告诉相关人,对应的api出错
new Thread(()->{
if(StringUtils.isBlank(saveOrderKye)){
stringRedisTemplate.opsForValue().set("saveOrderKye","save-order-fail",20, TimeUnit.SECONDS);
//模拟发短信功能
System.out.println("发送短信:productService 接口报错了"+request.getRemoteAddr());
}
}).start();
Map<String, Object> msg = new HashMap<>();
msg.put("code", -1);
msg.put("msg", "抢购人数太多,您被挤出来了,稍等重试");
return msg;
}
}
2.Feign结合Hystrix断路器开发实战 在springcloub 中的使用
Feign结合Hystrix断路器开发实战,其实是为了把异常跟精确的定位到某个接口,而上面标题一我说的 ystrx(断路器) 在springcloub 中的使用 主要是在controller 中使用 目的是可以更好的控制异常处理,或者报警通知,
所以开发标题二时,标题一上面的所有配置全需要保留,不然没有意义。
2.1开启feign支持hystrix (注意,一定要开启,旧版本默认支持,新版本默认关闭)#开启feign支持hystrix
hystrix:
enabled: true 2.2 ProductClient(name="product-service", fallback=ProductClientFallback.class ), class需要继承当前ProductClient的类
至于下面的 ProductClient 讲的是Feign 的使用可以看看我的博客 feign 的讲解
https://www.cnblogs.com/xiaowangbangzhu/p/10397037.html
//服务的生成者(被调用者)在注册中心注册的名字
@FeignClient(name = "product-service",fallback = ProductClientFallback.class)
public interface ProductClient {
//被调用者对应方法的路由(类和方法上的@RequestMapping)
/**
* 这里需要注意的两个地方
* <p>
* 1、在这里使用的GetMapping注解要和被调用发一致,如果还有问题就用@RequestMapping
* 2、@PathVariable需要设置value,如果不设置也不能成功启动
*
* @param id
* @return
*/
@GetMapping("/api/v1/product/find")
String findById(@RequestParam(value = "id") int id);
}
@Component
public class ProductClientFallback implements ProductClient { @Override
public String findById(int id) {
//在这里可以得到具体的某一个接口api出现的错误,然后返回信息
System.out.println("feign 调用product-service findbyid 异常");
return null;
}
}
下面的配置不建议加上,如果有需要可以加上
s设置feign 的连接时间和读取时间(不建议开启)
#默认optons readtimeout是60,但是由于hystrix默认是1秒超时
#feign:
# client:
# config:
# default:
# connectTimeout: 40000
# readTimeout: 4000 # 默认是一秒(不建议开启)
#hystrix:
# command:
# default:
# execution:
# isolation:
# thread:
# timeoutInMilliseconds: 4000
SpringCloud(五)之Spring Cloud 中 Feign结合Hystrix断路器开发实战的更多相关文章
- 小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上
笔记 3.Feign结合Hystrix断路器开发实战<上> 简介:讲解SpringCloud整合断路器的使用,用户服务异常情况 1.加入依赖 注意:网上新旧版本问 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下
笔记 4.Feign结合Hystrix断路器开发实战<下> 简介:讲解SpringCloud整合断路器的使用,用户服务异常情况 1.feign结合Hystrix ...
- Spring Cloud中Feign如何统一设置验证token
代码地址:https://github.com/hbbliyong/springcloud.git 原理是通过每个微服务请求之前都从认证服务获取认证之后的token,然后将token放入到请求头中带过 ...
- 解决Spring Cloud中Feign第一次请求失败的问题
在Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题 com.netflix.hystrix.exception.HystrixTimeoutE ...
- spring cloud中feign的使用
我们在进行微服务项目的开发的时候,经常会遇到一个问题,比如A服务是一个针对用户的服务,里面有用户的增删改查的接口和方法,而现在我有一个针对产品的服务B服务中有一个查找用户的需求,这个时候我们可以在B服 ...
- springcloud(五):Spring Cloud 配置中心的基本用法
Spring Cloud 配置中心的基本用法 1. 概述 本文介绍了Spring Cloud的配置中心,介绍配置中心的如何配置服务端及配置参数,也介绍客户端如何和配置中心交互和配置参数说明. 配置中心 ...
- Spring Cloud中关于Feign的常见问题总结
一.FeignClient接口,不能使用@GettingMapping 之类的组合注解 代码示例: @FeignClient("microservice-provider-user" ...
- 详解Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失
在Spring Cloud中我们用Hystrix来实现断路器,Zuul中默认是用信号量(Hystrix默认是线程)来进行隔离的,我们可以通过配置使用线程方式隔离. 在使用线程隔离的时候,有个问题是必须 ...
- Spring Cloud中五大神兽总结(Eureka/Ribbon/Feign/Hystrix/zuul)
Spring Cloud中五大神兽总结(Eureka/Ribbon/Feign/Hystrix/zuul) 1.Eureka Eureka是Netflix的一个子模块,也是核心模块之一.Eureka是 ...
随机推荐
- 介绍两个好玩的和Github相关的Chrome扩展
1. Octotree 默认的github网页里的代码显示没有我们在IDE里看到的直观,即代码文件所在的文件夹无法以树形层级结构显示在屏幕左边. 安装Octotree之后: 方便多了. 2. Isom ...
- 2.XML语言
XML语言 常见应用: XML技术除用于 /*保存有关系的数据*/之外,它还经常作软件配置文件,以描述程序模块之间的关系. 在一个系统软件中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定 例 ...
- 【Day3】项目实战。百度针对Xpath的反爬策略和解决方式
import lxml.etree as le with open('edu.html','r',encoding='utf-8') as f: html = f.read() html_x = le ...
- redis写入性能测试
import timeit import redis def clock(func): def clocked(*args, **kwargs): t0 = timeit.default_timer( ...
- MPU6050应用
@2019-08-07 [小记] MPU6050开发 -- 基本概念简介 MPU6050原理详解及实例应用 详解卡尔曼滤波原理 卡尔曼算法精讲与C++实现
- springboot无法获取证书内容
最近项目里面在接第三方验证的时候,需要用到生成的公钥和私钥证书.在demo测试的时候,发现在resources里面直接建立一个key文件夹放入证书文件,然后使用文件方式去获取,大概代码如下: File ...
- a 标签的download 属性在谷歌浏览器下无法下载图片,如何处理?
a 标签的download属性在下载图片文件的时候是如何的方便,可是可是谷歌浏览器不支持下载,而是下载打开新窗口预览图片.这个兼容性问题如何解决呢? 了解了一番,HTMLCanvasElement.t ...
- flyio 的请求封装
1.安装flyio.js npm install flyio --save-dev 2.在util创建一个fly.js用于封装 import Vue from 'vue' var Fly=requir ...
- NMI是什么
NMI是什么 2016/02/28 vmunix NMI(non-maskable interrupt),就是不可屏蔽的中断.根据Intel的Software Developer手册Volume 3, ...
- JS中BOM和DOM之间的关系
一.Javascript组成JavaScript的实现包括以下3个部分:1.核心(ECMAScript):描述了JS的语法和基本对象.2.文档对象模型 (DOM):处理网页内容的方法和接口.3.浏览器 ...