springcloud-eureka集群-整合hystrix框架整合feign

2023-11-19

继之前的项目继续扩展,整合hystrix和feign这两个框架。

1、修改服务器调用者的application.yml,增加如下代码

# 打开feign对hystrix的支持
feign:
  hystrix:
    enabled: true

# 配置hystrix
hystrix:
  threadpool:
    default:
      coreSize: 10  #线程池核心线程数
  command:
    #IService#hello(): 设置某一个接口 default: 设置全部接口
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 1000 #超时时间
      circuitBreaker:
        requestVolumeThreshold: 3  #当在配置时间窗口内达到此数量后,进行短路。默认20个
        sleepWindowInMilliseconds: 5  #短路多久以后开始尝试是否恢复,默认5s
        errorThresholdPercentage: 50%  #出错百分比阈值,当达到此阈值后,开始短路。默认50%

2、修改之前的Iservice.java接口,增加fallback = IserviceFallback.class参数,这是接口的错误回调类

@FeignClient(value = "eureka-service", fallback = IServiceFallback.class)
public interface IService {

    @GetMapping("/hello")
    String hello();

}

3、创建错误回调类IserviceFallback.java

@Component
public class IServiceFallback implements IService {

    @Override
    public String hello() {
        return "fallback_hello";
    }

}

4、controller中编写一个测试接口,Thread.sleep(1000),为了测试错误回退逻辑

 @GetMapping(value = "/hello", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public String hello() throws InterruptedException {
        Thread.sleep(1000);
        String hello = iService.hello();
        return "hello : " + hello;
    }

5、如果有统一的业务处理方法,可以扩展hystrix的拦截器

在启动类上增加@ServletComponentScan注解来扫描拦截器

创建MyFilter.java

@WebFilter(urlPatterns = "/*", filterName = "hystrixFilter")
public class Myfilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
            FilterChain filterChain) throws IOException, ServletException {

        System.out.println("===================MyFilter====================");
        // 初始化 hystrix 请求上下文
        HystrixRequestContext hystrixRequestContext = HystrixRequestContext.initializeContext();

        /* 业务逻辑 */

        try{
            filterChain.doFilter(servletRequest, servletResponse);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            hystrixRequestContext.shutdown();
        }
    }

    @Override
    public void destroy() {}

}

6、断路器的测试,修改Controller的hello()接口

@GetMapping(value = "/hello", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public String hello() throws InterruptedException {
        
        String hello = iService.hello();
        // 获取断路器对接口的开启状态,默认false
        HystrixCircuitBreaker hystrixCircuitBreaker = HystrixCircuitBreaker.Factory
                .getInstance(HystrixCommandKey.Factory.asKey("IService#hello()"));
        System.out.println(hystrixCircuitBreaker.isOpen() + "");
        return "hello : " + hello;
    }
编写一个执行函数,同时启动20个线程来访问hello接口

@Autowired
    private final RestTemplate restTemplate;
    /**
     * 测试断路器
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {

        RestTemplate restTemplate = new RestTemplate();
        for (int i = 0; i < 20; i++){
            Thread thread = new Thread(){
                @Override
                public void run() {
                    try {
                        String templateUrl = "http://127.0.0.1:8666/hello";
                        String result = restTemplate.getForObject(templateUrl, String.class);
                        System.out.println(result);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            thread.start();
        }
        Thread.sleep(20000);
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springcloud-eureka集群-整合hystrix框架整合feign 的相关文章

随机推荐

  • 海量影像图元合并可以考虑用openmp

    影像合并图元耗时较长 又是重复的功能 可以考虑并行openmp
  • Linux测试比较语句

    测试和比较语句用于if或脚本命令中 if condition then commands else if conditon then commands fi 或 condition command 如果condition为真则执行comma
  • [ 数据结构-C语言 ] 二叉树--初阶 大总结~~

    今天要和大家一起步入一个新的数据结构 二叉树 在学习了解二叉树之前我们先来了解什么是树 以下是本篇的主要内容及目录 目录 1 树的概念及其结构 1 1树的概念 1 2树的相关概念 重点 1 3树的表示 2 二叉树概念及结构 2 1概念 2
  • 优化算法 - BGD、MBGD、SGD - 梯度下降

    优化算法 BGD MBGD SGD 梯度下降 BGD SGD MBGD BGD BGD Batch Gradient Descent 批量梯度下降 损失函数 L X
  • 管道-阻塞与非阻塞

    非阻塞的管道和FIFO 管道和FIFO都可以设置非阻塞 它们两者都可以在打开之后通过fcntl函数设置O NONBLOCK标志来enable 一般而言 我们都是先使用F GETFL来获取当前文件状态标志 将它与O NONBLOCK按位或之后
  • javatServlet中的cookie设置

    cookie 服务器将一些信息存储在浏览器 本地 当用户再次打开网页时 会自动填充该信息 当浏览器再次发送请求时 会将存储的信息通过请求头的方式发送给服务器端 不需要用户每次都填充某些内容 cookie中理论上来讲 最大存储4KB内容 co
  • 数学界的扫地僧们(转)

    转载连接 http www newsmth net nForum article WorkLife 752660 前两天跟一个老同学聊近年来数学上的重大发现 结果作为科普人的我说着说着就发现 数学史原来就是一部八卦史 这个圈子奇葩辈出 怪事
  • C中violatile的用法

    1 violate影响编译器结果的输出 violate变量随时可能发生变化 与violate有关的运算不要进行编译优化 以免出错 例如 volatile int i 10 int j i int k i violate告诉编译器变量i是随时
  • 对接微信支付(二)统一下单API

    原创文章 对接微信支付 二 统一下单API 编程屋 大家可以先想一下 大家平时在PC端发起的支付都需要什么 是不是你选好商品之后 点击支付 然后PC端弹出来一个二维码 你扫码付款 付款完成之后就OK了 当然这只是针对我们用户来说的 对于我们
  • 什么是数字孪生技术?

    数字孪生是实体对象的虚拟模型 它跨越对象的生命周期 并使用从对象上的传感器发送的实时数据来模拟行为并监控操作 数字孪生可以复制许多现实世界中的物品 从工厂中的单台设备到完整的装置 例如风力涡轮机 甚至整个城市 数字孪生技术使您能够监督资产的
  • 毕业设计-基于机器视觉深度学习船只船舶检测

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • Idea设置maven依赖自动导入

    maven自动导入 setting gt Build gt Build Tools gt Any changes
  • mmocr环境配置

    win10 显卡3070 创建名为mmocr的环境 conda create n mmocr python 3 7 y 激活mmocr conda activate mmocr 失败了 安装完事竟然是cpu版本 没找到原因 本人3070显卡
  • SpringBoot 图片上传(详解篇)

    前言 SpringBoot在服务器内上传文件 是临时文件 在重启时候会生成另外的目录 也就意味着原来上传的图片在重启后就访问不到了 1 图片上传 PostMapping upload public CommonResult insertDb
  • [人工智能-深度学习-77]:目标检测 - 常见项目、应用

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122307915 目录 前言 场景一
  • 【Golang入门】Golang第一天心得

    生活所迫 入门一下Go 很奇葩的第一点 接口 package main import fmt 定义一个接口 type Shape interface Area float64 定义一个矩形类型 type Rectangle struct W
  • 企业级体验:未来体验管理的价值与趋势

    我从事企业级体验相关领域的工作已十六载有余 曾经就职的企业既有阿里巴巴 腾讯这样的互联网 大厂 也有顺丰 龙湖这样的线下 传统 企业 在这些企业中 我所工作的场景横跨了软件 电商 互联网 物流 零售 地产 金融等诸多业务领域 为不同业务场景
  • freeImage图像旋转滤波

    原文 http www cnblogs com wangshide archive 2012 04 25 2470693 html 1 使用了 freeImage 图像库进行图像读取 保存 如何将图片转为矩阵 如何处理图片的颜色 rgb 透
  • pandas笔记(10)——数据导出

    导出excel 格式 to excel excel writer sheet name Sheet1 na rep float format None columns None header True index True index la
  • springcloud-eureka集群-整合hystrix框架整合feign

    继之前的项目继续扩展 整合hystrix和feign这两个框架 1 修改服务器调用者的application yml 增加如下代码 打开feign对hystrix的支持 feign hystrix enabled true 配置hystri