在前面Feign整合Ribbon负载均衡的基础上(Feign整合Ribbon负载均衡),Feigin再整合Hystrix断路

一、backend_show_consumer工程

该工程的依赖如下

1、工程中的application.yml中增加配置

feign:
hystrix:
enabled: true

  

2、增加接口ProviderApi,对应backend_show_provider中的提供的两个接口

@FeignClient(name = "hello-service-provider",
path = "/provider",
fallback = ProviderFallbackAPIImpl.class
public interface ProviderApi { @RequestMapping(value = "/sayhello")
String invokerProviderController(@RequestParam("message")String message); @RequestMapping(value = "/{providerId}/sayhello", method = RequestMethod.POST)
String invokerProvider(
@RequestHeader("author") String author,
@PathVariable("providerId") String providerId,
@RequestBody UserModel json);
}

  设置fallback = ProviderFallbackAPIImpl.class

3、降级实现:ProviderFallbackAPIImpl类

//降级实现
@Component
public class ProviderFallbackAPIImpl implements ProviderApi {
@Override
public String invokerProviderController(String message) {
return "invokerProviderController fallback message=" +message;
} @Override
public String invokerProvider(String author, String providerId, UserModel json) {
return "invokerProvider fallback auth=" +author + ",providerId=" + providerId +",json=" +json;
}

  

4、Controller方法

@Slf4j
@RestController
public class ConsumerController { @Resource
private ConsumerServiceAPI serviceAPI; @Resource
private ProviderApi providerApi; @RequestMapping(value = "/sayhello/feign")
public String sayHelloFeign(String message){
System.out.println("feign message=" + message);
return providerApi.invokerProviderController(message);
} @RequestMapping(value = "/sayhello/post")
public String sayHelloPost( String author,
String providerId,
UserModel json){
log.info("author:{},providerId;{}, userModel:{}", author, providerId, json); return providerApi.invokerProvider(author, providerId, json);
} @RequestMapping(value = "/sayhello")
public String sayHello(String message){
return serviceAPI.sayHello(message);
} }

  

二、启动eureka服务(略)

三、启动backend_show_provider

四、测试

1、此时访问正常

或者

此时说明Feign整合Ribbon负载均衡器

2、停止backend_show_provider服务,这样backend_show_customer访问backend_show_provider就会超时,触发熔断

此时说明Feign整合Hystrix断路器

五、另外一种实现方式fallbackFactory

1、增加fallbackFactory配置

2、FallbackFactory 实现如下

@Component
public class FallbackFactory implements feign.hystrix.FallbackFactory {
@Override
public ProviderApi create(Throwable throwable) {
return new ProviderApi() {
@Override
public String invokerProviderController(String message) {
return "invokerProviderController FallbackFactory message=" +message;
} @Override
public String invokerProvider(String author, String providerId, UserModel json) {
return "invokerProvider FallbackFactory auth=" +author + ",providerId=" + providerId +",json=" +json; }
};
}
}

  

3、调用

Feign中使用hystrix的更多相关文章

  1. spring cloud中使用hystrix实现回退

    在微服务架构中,我们的服务被拆分成多个微服务,每个微服务完成自己的职责,微服务之间通过rpc或http进行调用.这个时候我们就要确保我们的服务高可用,但谁也说不准我们的服务能永远快速的提供服务.假如现 ...

  2. SpringCloud 在Feign上使用Hystrix(断路由)

    SpringCloud  在Feign上使用Hystrix(断路由) 第一步:由于Feign的起步依赖中已经引入了Hystrix的依赖,所以只需要开启Hystrix的功能,在properties文件中 ...

  3. feign中开启熔断的书写步骤

    /**   1.在pom.xml中引入依赖    2.在application.yaml中开启hystrix 3.在方法上配置熔断类     4.书写接口的实现类 **/ //1.在pom.xml中引 ...

  4. Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题【转】

    Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题 http://blog.didispace.com/Spring-Boot-And-Feign- ...

  5. spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?

    Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间 ...

  6. Spring Boot中使用Feign调用时Hystrix提示异常:"could not be queued for execution and no fallback available."以及"Rejected command because thread-pool queueSize is at rejection threshold"

    说明: 1.我还没有真正理解Spring Cloud的精髓,现只停留在使用阶段,可能存在分析不到位的问题. 1.这个是由于线程池的最大数量导致的,官方说随着线程池的数量越大,资源开销也就越大,所以调整 ...

  7. feign中的hytrix和turbin配置

    这里我用了两个生产者和两个消费者进行演示,如下图(画的不好看,凑活看看): 这里我就只讲下怎么注册到dashbord和相关的配置,提供者和消费者等代码可以去下载查看: https://github.c ...

  8. 在Feign中添加自定义配置

    首先先创建一个FeignConfig类,代码如下: package com.xing.config; import org.springframework.context.annotation.Bea ...

  9. springcloud feign增加熔断器Hystrix

    1.依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>s ...

随机推荐

  1. linux的基本操作概览

    目录 文件路径相关的命令 最重要的一个通配符:* zip相关命令 重定向 三种权限 一些网络操作 安装软件的三种方式 最近开始学习linux的一些基础操作,安装了ubantu 16版本的Linux操作 ...

  2. opencv3.0配置opencv_contrib

    在opencv3.0中无法直接使用sift,surf等特征点检测算子,需要额外配置opencv_contrib. 在查看网上诸多教程,失败n次后,终于找到了正确的配置方式. visual studio ...

  3. laravel进行单元测试的时候如何模拟数据库以及mockery的调用

    单元测试是独立的,所谓的独立是指有独立的运行容器,独立的数据库. 这样做有什么好处呢? (1). 不会跟正常的容器产生冲突,继而影响正常业务. (2). 数据库独立防止数据被修改影响单元测试结果. 这 ...

  4. CDI

    CDI,JAVA用语 Java EE CDI 主要使用@Inject注解来实现依赖注入,把受管理的bean注入到由容器管理的其它资源中去.在本教程中,我们将会介绍在CDI环境下几种不同的可选策略来实现 ...

  5. Django框架(四)

    八.Django 模型层(2) 多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息. ...

  6. Linux下输入某些命令时会提示:bash:command not found

    首先,查看$PATH中是否包含了这些命令. $PATH:决定了shell到哪些目录中去寻找命令或程序,PATH值是一系列的目录.当运行程序时,linux到这些目录下搜索进行编译链接. 格式: PATH ...

  7. 解决import caffe 时no module named protobuf的报错

    ProtoBuf是Google开发的可以实现内存与非易失存储介质(硬盘文件等等)交换时的协议接口.Caffe源码中大量使用了ProtoBuf作为权值和模型参数的载体. 在Anaconda下打开Anac ...

  8. 第一个博客——python通过值传递函数参数

    功能:银行账户计算利率(python实现) 部分代码: def addInterest(balance, rate): newBalance = balance * (1 + rate) balanc ...

  9. css隐藏滚动条依旧可以滚动

    在做企业页面的时候,大部分页面都应该是活的,不应该写死,因为要从后台拿数据进行填充.而后台的数据是不确定的,有时候会让我们的容器撑得很大.这时候我们需要隐藏掉滚动条达到美观或者其他布局效果,隐藏掉单个 ...

  10. day40-python多进程多线程-多线程实例和锁

    多线程 线程是应用程序中工作的最小单元. 多线程是现实有两种方式:方法一:将要执行的方法作为参数传给Thread的构造方法(和多进程类似)t = threading.Thread(target=act ...