在前面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. 面试官让你讲讲acks参数对消息持久化的影响

    (0)写在前面 面试大厂时,一旦简历上写了Kafka,几乎必然会被问到一个问题:说说acks参数对消息持久化的影响? 这个acks参数在kafka的使用中,是非常核心以及关键的一个参数,决定了很多东西 ...

  2. [数据结构]P1.1 链表结构

    * 注: 本文/本系列谢绝转载,如有转载,本人有权利追究相应责任. 2019年4月8日 Stan Zhang 2019年4月8日  格物致知,经世致用. [面试题]1.为什么要用链表? 数组具有的缺陷 ...

  3. 【Java】【9】String Date Calendar之间的转换

    前言: 1, Calendar 转化 String 2, Calendar 转化 Date 3,Date 转化 String 4,Date 转化 Calendar 5,String 转化 Calend ...

  4. RABC --权限控制解读

    一.基于RBAC的概念介绍 1.RBAC(Role-Based Access Control )基于角色的访问控制. 2.RBAC认为权限的过程可以抽象概括为:判断[Who是否可以对What进行How ...

  5. Nginx配置中的log_format用法梳理(设置详细的日志格式)

    nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式:另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,可以参加ngx_http_log_mo ...

  6. AIX中PV,VG,LV及FS常用相关命令

    1.PV常用相关命令 1)lsdev:列出ODM(Object Data Manager)中的设备. 2)chdev:修改一个AIX设备的属性. 3)mkdev:创建一个AIX设备. 4)chpv:修 ...

  7. python信号量

    同进程的一样 Semaphore管理一个内置的计数器,每当调用acquire()时内置计数器-1:调用release() 时内置计数器+1:计数器不能小于0:当计数器为0时,acquire()将阻塞线 ...

  8. day36-多进程多线程一

    多进程 概念:进程是程序在计算机上的一次执行活动.当你运行一个程序,你就启动了一个进程.显然,程序是死的(静态的),进程是活的(动态的).进程可以分为系统进程和用户进程.凡是用于完成操作系统的各种功能 ...

  9. day050 django第一天 自定义框架

    1.简单的web框架 1. 创建一个简单的python文件: import socket sever=socket.socket() sever.bind(('127.0.0.1',8001)) se ...

  10. 大数据面试题——如何从大量的url中找出相同的url

    题目描述: 给定a.b两个文件,各存放50亿个url,每个url各占64B,内存限制是4GB,请找出a.b两个文件共同的url 分析: 由于每个url需要占64B,所以50亿个url占用空间大小为50 ...