iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >在项目中直接使用hystrix的流程分析
  • 299
分享到

在项目中直接使用hystrix的流程分析

2024-04-02 19:04:59 299人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录什么是Hystrix一、背景二、使用方式2.1 jar包引入2.2 配置文件2.3 设置配置2.4 实现代码三、测试试验四、总结什么是Hystrix Hystrix是Netfli

什么是Hystrix

Hystrix是Netflix针对微服务分布式系统的熔断保护中间件,当我们的客户端连接远程的微服务时,有两种情况需要考虑:首先,如果远程系统当机了我们怎么办?

其次,我们如何管理对远程微服务的调用性能,以保证每个微服务以最小延迟最快性能响应?

Hystrix是一个有关延迟和失败容错的开源库包,用来设计隔离访问远程系统端点或微服务等,防止级联爆炸式的失败,也就是由一个小问题引起接二连三扩大的

疯狂的错误爆炸直至整个系统瘫痪,能够让复杂的分布式系统更加灵活具有弹性。这篇文章给大家介绍下在项目中如何直接使用hystrix?

一、背景

最近由于一些背景原因,需要在项目中需要对接口进行限流。所以就考虑到了直接使用Hystrix。但是呢,又不想直接使用SpringCloud,而是直接引入原生,现在发现挺好用的,所以记录下来,分享出来。

二、使用方式

2.1 Jar包引入

<dependency>
  <groupId>com.netflix.hystrix</groupId>
  <artifactId>hystrix-javanica</artifactId>
  <version>1.5.18</version>
</dependency>

<dependency>
  <groupId>com.netflix.hystrix</groupId>
  <artifactId>hystrix-core</artifactId>
  <version>1.5.18</version>
</dependency>

引入两个包,分别是Hystrix核心包,以及直接原生的Java包

2.2 配置文件

在Resources目录下面,放上hystrix.properties文件。配置如下。

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=1000
hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
hystrix.command.default.metrics.rollingStats.numBuckets=10
hystrix.command.default.metrics.rollingStats.timeInMilliseconds=10000
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50
hystrix.command.default.circuitBreaker.forceOpen=false
hystrix.command.default.circuitBreaker.forceClosed=false
hystrix.command.default.requestCache.enabled=false

hystrix.threadpool.default.coreSize=10
hystrix.threadpool.default.maximumSize=10
hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize=true
hystrix.threadpool.default.keepAliveTimeMinutes=1
hystrix.threadpool.default.maxQueueSize=100
hystrix.threadpool.default.queueSizeRejectionThreshold=101
hystrix.threadpool.default.metrics.rollingStats.numBuckets=10
hystrix.threadpool.default.metrics.rollingStats.timeInMilliseconds=10000
#hystrix.timer.threadpool.default.coreSize = 10

这个是一部分配置,如果需要知道更多,可以Click-GitHub Hystrix Wiki

2.3 设置配置

设置Hystrix的配置


@Configuration
public class HystrixConfig implements InitializingBean {

    @Bean
    public HystrixCommandAspect hystrixCommandAspect(){
        // 初始化切面
        return new HystrixCommandAspect();
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        // 初始化熔断器配置
        // 清除配置
        ConfigurationManager.getConfigInstance().clear();
        // 加载配置文件
        ConfigurationManager.loadCascadedPropertiesFromResources("hystrix");
    }
}

HystrixCommandAspect是jar包带的切面,通过切面通知,找去需要熔断的方法,然后进行处理。

@Aspect
public class HystrixCommandAspect {
    //...略

    @Pointcut("@annotation(com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand)")
    public void hystrixCommandAnnotationPointcut() {
    }

  @Pointcut("@annotation(com.netflix.hystrix.contrib.javanica.annotation.HystrixCollapser)")
    public void hystrixCollapserAnnotationPointcut() {
    }

    @Around("hystrixCommandAnnotationPointcut() || hystrixCollapserAnnotationPointcut()")
    public Object methodsAnnotatedWithHystrixCommand(final ProceedingJoinPoint joinPoint) throws Throwable {
        // ... 略
    }
}

ConfigurationManager看看这名字,就知道是配置管理的,也不负众望,的确是用来加载配置的。

2.4 实现代码


@RestController
public class HystrixTestController {


    @GetMapping("/hystrix")
    @HystrixCommand(commandKey = "hystrixTestController-getHello", threadPoolKey = "hystrixTestController-getHello",
            fallbackMethod = "getHelloFallback")
    public String getHello(){
        try {
            // 执行太快不便于测试
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "TEST Hystrix";
    }

    public String getHelloFallback(Throwable error){
        // 打印日志
        System.out.println("TEST Hystrix: " + error.getMessage());
        return "TEST Hystrix: " + error.getMessage();
    }
}

代码没有啥花里胡哨的,直接在需要熔断的方法上面加上HystrixCommond。

commandKeythreadPoolKey是自己设置的,可以为这个方法定制线程数、核心线程等配置(在hystrix.properties中添加)。给出示例如下。

#-------------------------------------------------------------------
hystrix.threadpool.hystrixTestController-getHello.coreSize=1
hystrix.threadpool.hystrixTestController-getHello.maximumSize=2
hystrix.threadpool.hystrixTestController-getHello.maxQueueSize=1
hystrix.threadpool.hystrixTestController-getHello.queueSizeRejectionThreshold=2
#-------------------------------------------------------------------

至此,完成了所有的配置和准备,接下来直接测试

三、测试试验

直接从jmeter官网下载jmeter,拿到跑测试, 具体下载过程就不一样展示了,直接贴出测试结果。

由于为这个方法设置的核心线程数、线程数、队列数都不大,很容易测试出结果。我们可以从console中很明显的看到熔断器打开,说明方法被执行到。

在从Jmeter中查看一下结果,也是可以佐证我们的效果。测试图如下:

四、总结

自此,整个流程是走完了,可以看到效果着实起来了。 Hystrix知识限流熔断中的一种方案,大家可以结合实际情况做出更多的选择。

--结束END--

本文标题: 在项目中直接使用hystrix的流程分析

本文链接: https://www.lsjlt.com/news/150581.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在项目中直接使用hystrix的流程分析
    目录什么是Hystrix一、背景二、使用方式2.1 Jar包引入2.2 配置文件2.3 设置配置2.4 实现代码三、测试试验四、总结什么是Hystrix Hystrix是Netfli...
    99+
    2024-04-02
  • IDEA2022中部署TomcatWeb项目的流程分析
    目录使用工具:1.下载Tomcat:1.1.Tomcat启动、关闭。卸载:在Tomcat在启动Web项目:2.在IDEA中构建Maven Web项目  2.1.使用模板构建2.2.不...
    99+
    2023-05-13
    idea部署Tomcat项目 idea配置部署Tomcat
  • ASP.NETCore在WebApi项目中使用MiniProfiler分析EntityFrameworkCore
    安装配置MiniProfiler 在现有的ASP.NET Core MVC WebApi 项目里,通过Nuget安装MiniProfiler: Install-Package Min...
    99+
    2024-04-02
  • 微信小程序在{{ }}中直接使用函数的示例分析
    这篇文章主要介绍了微信小程序在{{ }}中直接使用函数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言在微信小程序开发中(原生wxml、wxcss),想直接在{{...
    99+
    2023-06-20
  • 项目中怎样使用git流程
    随着大型项目的不断增多,越来越多的开发者关注项目如何管理他们的代码。版本控制系统Git已逐渐成为最受欢迎的工具之一。Git通常可用于协作开发和版本控制,使多个开发团队能够同时在同一项目上工作。本文将介绍如何使用Git流程来组织和管理软件开发...
    99+
    2023-10-22
  • 如何在java项目中使用io流
    这篇文章将为大家详细讲解有关如何在java项目中使用io流,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.1 java.io.objectInputStream 对象输入流:用于将一组字节...
    99+
    2023-05-31
    java io流 ava
  • docker-compose镜像发布springboot项目的流程分析
    简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose允许用户通过一个单独的docker-compose.yml...
    99+
    2024-04-02
  • springboot+vue 若依项目在windows2008R2企业版部署流程分析
    一、准备工作 1、本次使用jar包启动后端,故而准备打包后的jar文件。注意修改配置文件中的路径,根据需要部署的操作系统进行更改。 2、提前写bat文件用来启动jar包。 @ech...
    99+
    2022-12-15
    springboot在windows2008R2企业版部署 springboot vue windows2008R2部署
  • golang中的jwt使用教程流程分析
    目录golang-jwt使用加密解密源码分析SignedStringParseWithClaimsgolang-jwt使用 老版本<v4.0.0 为github.com/dgr...
    99+
    2023-05-20
    golang jwt使用 golang jwt
  • 小项目改造快速引入mybatis的流程分析
    目录项目背景开始改造引入对应的 start在 application.yml 中补充配置补充文件夹总结项目背景 项目在最开始,定位为一个插件、功能补充,为现有的 OA 提供一个报表功...
    99+
    2024-04-02
  • 解析.netcore项目中IStartupFilter使用教程
    背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host...
    99+
    2024-04-02
  • java项目中的多线程实践分析
    本篇内容主要讲解“java项目中的多线程实践分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java项目中的多线程实践分析”吧!项目开发中对于一些数据的处理需要用到多线程,比如文件的批量上传,...
    99+
    2023-06-25
  • 在IDEA的maven项目中如何连接并使用MySQL8.0
    这篇文章主要介绍了在IDEA的maven项目中如何连接并使用MySQL8.0,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先看一下我的基本...
    99+
    2024-04-02
  • 使用Webpack打包的流程分析
    目录1、webpacks是什么?2、Webpack安装3、初始化项目4、使用webpack进行JS打包5、使用webpack进行CSS打包总结简单的说了一下webpack是干嘛的,和...
    99+
    2022-12-19
    使用Webpack打包 Webpack打包流程
  • 分析Cookie SameSite属性及其在ASP.NET项目中的应用
    本篇内容主要讲解“分析Cookie SameSite属性及其在ASP.NET项目中的应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析Cookie Same...
    99+
    2024-04-02
  • C++ 生态系统中流行库和框架在实际项目中的案例分析
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • zookeeper在项目中如何使用的
    在项目中,zookeeper通常被用作分布式系统中的协调服务,用于管理和监控分布式系统中的各种配置信息,元数据和状态信息。以下是在项...
    99+
    2024-04-02
  • 线程池如何在Java项目中使用
    今天就跟大家聊聊有关线程池如何在Java项目中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java通过Executors提供四种线程池,分别为:newCachedThreadP...
    99+
    2023-05-31
    java 线程池 ava
  • 线性表接口如何在java项目中使用
    这篇文章给大家介绍线性表接口如何在java项目中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java 线性表接口的实例详解前言:线性表是其组成元素间具有线性关系的一种线性结构,对线性表的基本操作主要有插入、删除、...
    99+
    2023-05-31
    java 线性表 ava
  • Go语言在大型项目开发中的适用性分析
    Go语言在大型项目开发中的适用性分析 随着互联网的快速发展,大型项目的开发变得日益复杂和多样化。开发人员在选择适合项目的编程语言时,需要考虑到语言的性能、可维护性、并发处理能力等因素。...
    99+
    2024-03-11
    go语言 大型项目 适用性
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作