Springcloud 整合Hystrix 断路器,支持Feign客户端调用
1,在这篇博文中,已经大致说过了Springcloud服务保护框架 Hystrix在服务隔离,服务降级,以及服务熔断中的使用
https://www.cnblogs.com/pickKnow/p/11250374.html
2,声明式的调用hystrix,也是很重要的,以及用整合feign 客户端
maven:
<!-- hystrix断路器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
3,使用@HystrixCommand
//@HystrixCommand 默认开启服务隔离,是以线程池方式
//@HystrixCommand 默认开启服务降级,fallbackMethod 方法名就是服务的降级名称
//@HystrixCommand 默认开启服务熔断机制
//@Hystrix 要禁止超时时间,默认1 秒,如果没有即使响应,会走业务逻辑,但是也会走服务降级方法,所以要禁止超时时间,实际项目中,要把超时时间设长一点
@RestController
public class MemberServiceImpl { @Autowired
private OrderServiceFeign orderServiceFeign; //@HystrixCommand 默认开启服务隔离,是以线程池方式
//@HystrixCommand 默认开启服务降级,fallbackMethod 方法名就是服务的降级名称
//@HystrixCommand 默认开启服务熔断机制
//@Hystrix 要禁止超时时间,默认1 秒,如果没有即使响应,会走业务逻辑,但是也会走服务降级方法,所以要禁止超时时间
@HystrixCommand(fallbackMethod = "orderServiceFallback")
@RequestMapping("/getOrder")
public Order getOrder(String orderId) {
System.out.println("orderToUserInfo:" + "当前线程池名称:" + Thread.currentThread().getName());
return orderServiceFeign.getOrder(orderId);
} @RequestMapping("/orderServiceFallback")
public String orderServiceFallback() {
return "服务器繁忙,请稍后重试";
} }
4,配置文件
###服务启动端口号
server:
port: 8000
###服务名称(服务注册到eureka名称)
spring:
application:
name: app-aiyuesheng-member
###服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka ###因为该应用为注册中心,不会注册自己
register-with-eureka: true
###是否需要从eureka上获取注册信息
fetch-registry: true ###设置feign客户端超时时间
ribbon:
###指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间。
ReadTimeout: 5000
###指的是建立连接后从服务器读取到可用资源所用的时间。
ConnectTimeout: 5000 feign:
hystrix:
enabled: true #### hystrix禁止服务超时时间
hystrix:
command:
default:
execution:
timeout:
enabled: false
5,在启动类上加上使用Hystrix的注解
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
public class MemberApp {
public static void main(String[] args) {
SpringApplication.run(MemberApp.class, args);
} }
缺点: 每个服务隔离都会写一个服务降级的方法,很繁琐,所以我们用类的方式去实现:
@Component
public class OrderServiceFeignFallback implements OrderServiceFeign{ @Override
public Order getOrder(String orderId) {
Order order = new Order();
order.setOrderName("服务降级");
// 可以添加个Response 来返回
return order; } }
feign 客户端添加fallback 的类:
@FeignClient(value = "app-aiyuesheng-order",fallback = OrderServiceFeignFallback.class)
public interface OrderServiceFeign extends IOrderService { }
这样接口在掉用的时候,不会整个方法都新创建的线程池,只有feign 客户端调用的会调用线程池:
@RequestMapping("/getOrder2")
public Order getOrder2(String orderId) {
System.out.println("orderToUserInfo:" + "当前线程池名称:" + Thread.currentThread().getName());
return orderServiceFeign.getOrder(orderId); //如果有必要,会走服务降级的方法
}
Springcloud 整合Hystrix 断路器,支持Feign客户端调用的更多相关文章
- Spring Boot使用Feign客户端调用远程服务时出现:timed-out and no fallback available,failed and no fallback available的问题解决
timed-out and no fallback available: 这个错误基本是出现在Hystrix熔断器,熔断器的作用是判断该服务能不能通,如果通了就不管了,调用在指定时间内超时时,就会通过 ...
- Feign 客户端调用错误
1.@RequestBody 必须要写在实现接口中 2.Feign 客户端调用的时候如果有参数的话,默认是发送post请求 3.服务接口中的请求参数必须要加上@RequestParam("r ...
- SpringCloud(二) - Eureka注册中心,feign远程调用,hystrix降级和熔断
1.项目模块介绍 2. 父项目 主要依赖 spring-cloud 的 版本控制 <properties> <!-- springCloud 版本 --> <scd.ve ...
- SpringCloud整合Hystrix
1.Hystrix简介 Hystrix是由Nefflix开源的一个延迟和容错库,用于隔离访问远程系统.服务或第三方库,防止级联失败,从而提升系统的可用性.容错性与局部应用的弹性,是一个实现了超时机制和 ...
- Spring Cloud之Feign客户端调用工具
feign介绍 Feign客户端是一个web声明式http远程调用工具,提供了接口和注解方式进行调用. Spring Cloud 支持 RestTemplate Fetin Feign客户端实际开发 ...
- SpringCloud之Hystrix断路器(六)
整合Hystrix order-service pom.xml <dependency> <groupId>org.springframework.cloud& ...
- 【微服务架构】SpringCloud之Hystrix断路器(六)
一:什么是Hystrix 在分布式环境中,许多服务依赖项中的一些将不可避免地失败.Hystrix是一个库,通过添加延迟容差和容错逻辑来帮助您控制这些分布式服务之间的交互.Hystrix通过隔离服务之间 ...
- springcloud第七步:fegin客户端调用工具
什么是Feign Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解 ...
- SpringCloud之Hystrix断路器以及dashboard 属性详解
1.自定义hystrixCommand: https://blog.csdn.net/u012702547/article/details/78032191?utm_source=tuicool&am ...
随机推荐
- 使用Properties配置文件进行配置读取
#使用Properties配置文件进行配置读取: 例如:有一个配置文件的内容如下: # setting.properties last_open_file=/data/hello.txt auto_s ...
- http协议概览
这里我只是对一些知识进行简单的整理,方便自己理解记忆,还有很多不完善的地方,更多细节,需要查看书籍或者其他文章 http协议的发展过程 HTTP 是基于 TCP/IP 协议的应用层协议.它不涉及数据包 ...
- Linux学习资料地址汇总-不定时更(一)
https://linux.linuxidc.com/ 用户名和密码都是www.linuxidc.com
- 一致性hash算法之php实现
源码地址:https://github.com/killallspree/myFrame/blob/master/framework/components/Flexihash.php
- c++第二周阶段小测2
函数参数已完成(全部是正确答案) 1 [单选题] 以下关于函数参数的说法,不正确的是 A. 函数调用时,先将实参的值按照位置传递给对应的形参. B. 实参与形参的个数及顺序不必一一对应. ...
- MATLAB神经网络(3) 遗传算法优化BP神经网络——非线性函数拟合
3.1 案例背景 遗传算法(Genetic Algorithms)是一种模拟自然界遗传机制和生物进化论而形成的一种并行随机搜索最优化方法. 其基本要素包括:染色体编码方法.适应度函数.遗传操作和运行参 ...
- 结巴分词demo
#encoding=utf-8 from __future__ import unicode_literals import sys sys.path.append("../") ...
- C++ 线程添加互斥量
//创建互斥量 HANDLE g_hMutex = NULL; WaitForSingleObject(g_hMutex, INFINITE); ReleaseMutex(g_hMutex);
- Python输出水仙花数,用逗号分隔
描述 "水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身. ...
- Java基础(五):数组
数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同且无序的元素的存储在固定长度且有序的内存空间. 创建一个数组 在Java中,我们可以通过[]去声明一个指定类型的数组 int[] a; // ...