在前面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. L0 Regularization

    参考: Learning Sparse Neural Networks through L0 Regularization The Variational Garrote

  2. Practical Node.js (2018版) 第9章: 使用WebSocket建立实时程序,原生的WebSocket使用介绍,Socket.IO的基本使用介绍。

    Real-Time Apps with WebSocket, Socket.IO, and DerbyJS 实时程序的使用变得越来越广泛,如传统的交易,游戏,社交,开发工具DevOps tools, ...

  3. 联盟链初识以及Fabric环境搭建流程

    这篇文章首先简单介绍了联盟链是什么,再详细的介绍了Fabric环境搭建的整个流程. 区块链分类: 以参与方式分类,区块链可以分为:公有链.联盟链和私有链. 定义: 我们知道区块链就是一个分布式的,去中 ...

  4. netty-socketio(一)之helloworld,与springboot整合

    netty-socketio是一个开源的Socket.io服务器端的一个java的实现, 它基于Netty框架. 1.参考资料 (1)netty-socketio项目github地址: https:/ ...

  5. JavaScript基础知识点总结

    JavaScript----js 全栈课程-------全栈工程师 前端:信息展示,普通用户浏览---前端工程师(html+css:静态页面 js:页面的交互效果) 后台:信息管理,管理员,数据库-- ...

  6. Jquery获取元素方法

    Jquery 获取元素的方法分为两种:jQuery选择器.jQuery遍历函数. 1.获取本身: a.只需要一种jQuery选择器 选择器 实例 说明 #Id $('#myId') ID选择器: 可以 ...

  7. Python使用MySQL数据库(新)(转)

    http://www.cnblogs.com/fnng/p/3565912.html 一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步 ...

  8. query

  9. Curl追踪请求延时问题

    背景原因:测试环境发现一个连接内网访问和外网访问延迟差别很大,内网访问很快.外网访问很慢.于是我们用curl来诊断问题所在的区域! 命令如下: curl -o /dev/null -s -w %{ti ...

  10. nginx的变量参数 详解

    $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为 ...