spring cloud feign 熔断hystrix

springcloud实战:服务间通信OpenFeign熔断 Spring Cloud OpenFeign熔断 前面讲述了服务之间的相互通信,通过注解的形式,OpenFeign 的声明式HTTP客户端很容易做到不同服务之间的相互调用。 我们的服务最终会部署在服务器上,由于各种原因,服务难免会发生故障,这时其他服务将无法调用故障服务,可能会一直卡在那里,导致用户体验差。针对这个问题,我们需要对服务接口进行错误处理,一旦发现无法访问,立即返回并报错,即捕捉到异常后立刻以可读化的字符串的形式返回到前端。 基于以上问题,业界提出了熔断器模型。在Spring C. 阅读详情

熔断是为了避免雪崩现象。 

eureka-server和eureka-provider就不在赘述。

consumer项目pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.sdgtt.com</groupId>
	<artifactId>feign-consumer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>feign-consumer</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
		<dependency>
            <!--            监控-->
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.16.6</version>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

consumer项目,配置文件如下:

server:
  port: 8081
spring:
  application:
    name: feign-consume
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:12346/eureka/


feign:
  hystrix:
    enabled: true

hystrix:
    command:
      default:
        execution:
          timeout:
            enabled: true
          isolation:
            thread:
              timeoutInMilliseconds: 20000 #hystrix超时熔断时间,进行短路。

ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询
    ConnectTimeout: 1000 #请求连接超时时间
    ReadTimeout: 10000 #请求处理的超时时间
    OkToRetryOnAllOperations: true #对所有请求都进行重试 false:所有get重试,true:get,post都会重试
    MaxAutoRetriesNextServer: 1 #切换实例的重试次数,不包括首次调用
    MaxAutoRetries: 2 #同一台实例最大重试次数,不包括首次调用





启动类

package com.sdgtt.com.feignconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableDiscoveryClient
@EnableFeignClients
@EnableEurekaClient
@EnableHystrix
@SpringBootApplication
public class FeignConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(FeignConsumerApplication.class, args);
	}

}

访问:http://localhost:8081/feign/test/hello

当路由到provider2时,返回正常,请求到provider1时抛出异常

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.netflix.hystrix.exception.HystrixRuntimeException: ServiceFeignClientInterface#consumer() timed-out and no fallback available.] with root cause

java.util.concurrent.TimeoutException: null
	at com.netflix.hystrix.AbstractCommand.handleTimeoutViaFallback(AbstractCommand.java:997) ~[hystrix-core-1.5.18.jar:1.5.18]
	at com.netflix.hystrix.AbstractCommand.access$500(AbstractCommand.java:60) ~[hystrix-core-1.5.18.jar:1.5.18]
	at com.netflix.hystrix.AbstractCommand$12.call(AbstractCommand.java:609) ~[hystrix-core-1.5.18.jar:1.5.18]
	at com.netflix.hystrix.AbstractCommand$12.call(AbstractCommand.java:601) ~[hystrix-core-1.5.18.jar:1.5.18]
	at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$4.onError(OperatorOnErrorResumeNextViaFunction.java:140) ~[rxjava-1.3.8.jar:1.3.8]
	at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onError(OnSubscribeDoOnEach.java:87) ~[rxjava-1.3.8.jar:1.3.8]
	at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onError(OnSubscribeDoOnEach.java:87) ~[rxjava-1.3.8.jar:1.3.8]
	at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$1.run(AbstractCommand.java:1142) ~[hystrix-core-1.5.18.jar:1.5.18]
	at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable$1.call(HystrixContextRunnable.java:41) ~[hystrix-core-1.5.18.jar:1.5.18]
	at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable$1.call(HystrixContextRunnable.java:37) ~[hystrix-core-1.5.18.jar:1.5.18]
	at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable.run(HystrixContextRunnable.java:57) ~[hystrix-core-1.5.18.jar:1.5.18]
	at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$2.tick(AbstractCommand.java:1159) ~[hystrix-core-1.5.18.jar:1.5.18]
	at com.netflix.hystrix.util.HystrixTimer$1.run(HystrixTimer.java:99) ~[hystrix-core-1.5.18.jar:1.5.18]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_25]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[na:1.8.0_25]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[na:1.8.0_25]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[na:1.8.0_25]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_25]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_25]
	at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25]

原因:

hystrix:
    command:
      default:
        execution:
          timeout:
            enabled: true

开启了超时异常。可以关闭,关闭之后会转发到下一个实例。网上有说把hystrix的超时时间改长,也是可以的,总的时间可以是hystrix的超时时间=[(MaxAutoRetries+1)+ (MaxAutoRetriesNextServer+1)] * ReadTimeout

上边的例子改成[(2+1)+(1+1)] * 10000 = 50000.

hystrix:
    command:
      default:
        execution:
          timeout:
            enabled: true
          isolation:
            thread:
              timeoutInMilliseconds: 50000 #hystrix超时熔断时间

code:https://github.com/foxiaotao/spring-cloud-demo

Spring Cloud学习笔记(五)-熔断器Hystrix介绍以及Feign,RestTemplate的熔断配置 一.什么是Hystrix,能干什么?   分布式系统中服务与服务之间相互依赖,一种不可避免的情况就是当某些服务出现故障时,依赖于它们的其他服务出现远程调度的线程阻塞,在高并发的情况下,可能在几秒钟内就会使整个服务处于线程负载饱和状态,从而从一个服务不可用扩散到整个服务不可用,既雪崩效应.Hystrix是Netflix公司开源的一个项目,它提供了熔断器功能,能够阻止分布式系统中的联动故障. 二.... 阅读详情

相关推荐

feign + hystrix 监控和熔断测试(Spring Cloud)

1 修改sp09-feign项目 1) pom.xml 添加 hystrix 起步依赖 feign 没有包含完整的 hystrix 依赖 右键点击项目,编辑起步依赖,添加hystrix依赖 2) 主程序添加 @EnableCircuitBreaker 3) sp09-feign 配置 actuator,暴露 hystrix.stream 监控端点 actuator 依赖 查看pom.xml...

weixin_43694465的博客 542

Spring Cloud之Feign消费和Hystrix熔断

spring cloud微服务技术之Feign消费和Hystrix熔断。Feign消费也是微服务中最重要的技术之一,其可以通过本地调用接口的方式调用远程的服务接口,同时配以Hystrix进行熔断处理,无论是从理论还是技术实现,都需要形象的理解和实战的体会。这里从通俗的方法理解理论,并且从基本的实现方法实现Feign消费和Hystrix熔断的使用。

play_big_knife的博客 1813

Spring Cloud 系列二《熔断Hystrix(feign/ribbon)及监控Turbine》

0 前言 搭建一个简单的server,和一个服务提供者support,然后分别创建一个服务消费者:feign Consumer,一个服务消费者ribbon Consumer。 分别测试Hystrix效果。 1、简单的Server+Support 1.1 代码截图 1.2 父pom 详见《Spring Cloud配置中心(一)》-“3 父 pom文件,关键部分”。 1.3 server的pom <dependencies> <dependency>

端点星 212

springcloud-服务熔断

SpringCloud之服务熔断 雪崩效应(熔断器的背景)     在微服务架构中,一个应用由多个服务组成。相互依赖,依赖关系错综复杂。若有一个服务因为故障原因,可能会导致整个服务崩溃。     例如一个微服务架构存在A、B、C、D、E、F等多个服务,它们的依赖关系如下图。 图1:服务依赖关系     请求1调用A、D、E、F四个服务才能完成。请求 2 需要调用 B、E、D 三个服务才能完成,请求 3 需要调用服务 C、F、E、D 四个服务才能完成。微服务之间的调用,就是所谓的扇出,当扇出的链路上服务E发

paiidds的博客 1万+

14、Spring Cloud 中 Feign 客户端与 Hystrix 熔断机制的应用

本文详细介绍了在 Spring Cloud 中使用 Feign 客户端和 Hystrix 熔断机制的实践方法。通过构建两个微服务 Product Web 和 Product Server,展示了 Feign 客户端如何简化微服务之间的同步 HTTP 调用。同时,引入 Hystrix 实现熔断机制,防止服务故障级联,提高系统容错能力。文中还介绍了如何构建 Hystrix 仪表盘以监控熔断状态,以及优化熔断逻辑的最佳实践。适合希望提升微服务健壮性和可靠性的开发者参考。

pz890123456的博客 40

详解Spring Cloud Feign 熔断配置的一些小坑

主要介绍了详解Spring Cloud Feign 熔断配置的一些小坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Spring Cloud Feign 熔断、异常处理

spring cloud alibaba 用Feign调取服务时,如果服务端发生异常要传递给客户端,或者客户端拦截到异常响应做相应的业务处理,可有几种实现。

至今、的专栏 1万+

SpringCloud 微服务架构(15)- 基于 Feign的熔断配置

1 基于 Feign的熔断配置 SpringCloud Fegin默认已为Feign整合了hystrix,所以添加Feign依赖后就不用在添加hystri 1.1 案例 IProductFeignClient package com.tzb.order.feign; import com.tzb.order.entity.Product; import org.springframework.cloud.openfeign.FeignClient; import org.springframew

一角残叶的博客 789

利用VS2019编写安卓APP的步骤和所遇问题的解决办法

遇到了代码错误,这个可以将鼠标箭头置于错误代码处,这样VS2019给你解决办法,给的方法不能解决,并且读了程序都没有问题,那么你应该重启软件,这样还是不能解决,你尝试重新生成解决方案,还是不能解决有可能是运用的代码与当前版本不相符和、过时了,这个时候应当运用相应版本的代码。注:VS2019编写APP的空间不是很稳定,当你写的代码没有问题,但是出现了报错,可能是空间崩溃了,这个时候可以重启软件。点击“+”号,创建密钥存储,输入“别名”、“密码”、以及下面中的任意一项,直至红色框消失后。

youbestcando的博客 7813

AI智能体Codex实战:外贸客户开发自动化,85家精准客户深度分析

如果你在外贸行业,特别是工业品领域,一定遇到过这样的困境:想开发海外客户,但不知道从何下手。Google搜索出来的要么是B2B平台上的老面孔,要么是信息残缺的过时黄页。手动筛选、整理、验证,一个客户信息就要花上半小时,效率低得让人抓狂。 更头疼的是,好不容易找到一些公司名称,却不知道他们的采购决策人是谁、公司规模如何、业务是否匹配。传统的客户开发就像大海捞针,投入大量时间成本,回报却充满不确定性。 今天要介绍的这个工具,可能会彻底改变你的工作流。它不是另一个CRM软件,而是一个基于AI的智能客户开发与情报分

weixin_29054399的博客 346

【Spring Cloud】【Hystrix】Feign下Hystrix的简单熔断测试

一、引言 1. 背景 分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。 2. 简介 Hystrix是Netlifx开源的一款容错框架,防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。   二、环境准备 Int

qq_39093164的博客 818

最新版Node.js下载安装及环境配置教程(非常详细)

选择对应你系统的Node.js版本。

DN金猿的博客 12万+

使用IntelliJ IDEA在Spring Cloud的Feign项目中使用Hystrix熔断器

Eureka注册中心:《使用IntelliJ IDEA创建Spring Cloud服务注册中心》 服务提供者创建:《使用IntelliJ IDEA创建Spring Cloud的Eureka Client》 Ribbon实现负载均衡:《使用IntelliJ IDEA创建Ribbon项目实现负载均衡》 集成Feign的项目:《使用IntelliJ IDEA创建集成Feign的项目简化服务调用的网...

我爱编程持之以恒 717

微生物测序分析LEfSe

LEfse分析定义 LEfse分析即LDA Effect Size分析,可以实现多个分组之间的比较,还进行分组比较的内部进行亚组比较分析,从而找到组间在丰度上有显著差异的物种(即biomaker);

宁生信 5万+

MicroChip的SmartFusion2的M2S090芯片的全流程开发环境搭建和Demo设计

MicroChip的SmartFusion2的M2S090芯片的全流程开发环境搭建和Demo设计

qq_45806640的博客 455

Spring cloud(三)熔断(Feign+Ribbon+Hystrix)

一、环境 jdk:12 spring cloud:Greenwich.RELEASE spring boot:2.1.0.RELEASE spring-cloud-starter-feign:2.0.0.M2 参考 https://blog.youkuaiyun.com/forezp/article/details/81040990

weixin_45040801的博客 239

Python爬虫实战:如何爬取京东商品评论数据

在本文中,我们介绍了如何使用 Python 爬虫技术爬取京东商品的评论数据。首先,我们分析了京东商品评论的 API 接口和 JSON 数据结构,然后编写了爬虫程序来抓取评论数据,并将数据保存到 CSV 文件中。接着,我们进行了一些基本的数据分析,包括评分分布和简单的情感分析。爬取京东商品评论的数据可以为电商分析、情感分析等提供有价值的信息。你可以在此基础上进行更深入的分析,挖掘更多的商业价值。希望本篇教程能够帮助你了解如何利用 Python 进行电商数据的爬取和分析!

2201_76125261的博客 1647

Spring Cloud基础教程(六):Feign熔断器使用(Hystrix)

上一篇博客讲解了Ribbon使用Hystrix,本篇博客讲解下Feign使用Hystrix。一、准备将服务消费者(Ribbon)使用博客中的Consumer-Ribbon工程,复制一份,命名为Consumer-Ribbon-Hystrix。二、工程修改Feign是自带断路器的,在D版本的Spring Cloud中,它没有默认打开。需要在配置文件中配置打开它,在配置文件加以下代码,feign.hys...

不忘初心的专栏 5362

HFSS实战项目——微带带通滤波器设计

本文详细介绍并设计了一款微带带通滤波器,通过HFSS三位电磁仿真软件对其进行仿真设计及优化,仿真结果表明,本文设计的滤波器表现出优良的滤波性能,符合设计要求。

2401_87464239的博客 5393

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

feign直接走熔断_Spring Cloud实战系列(四) - 熔断器Hystrix

前言在微服务框架 Spring Cloud 中,可以用 RestTemplate 配合 Ribbon 或 Feign 实现 服务与服务 之间的 相互调用。为了保证服务的 高可用,单个服务 通常会采用 集群部署。由于 网络原因,服务并不能保证 100% 的 可用性,如果 单个服务 出现问题,调用这个服务就会出现 线程阻塞,此时若有 大量的请求 涌入,Servlet 容器的 线程资源 会被耗尽,导致 ...

weixin_39857211的博客 630

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

spring cloud netflix (08) Feign模式下使用熔断器(Hystrix)防止服务雪崩

前言 完整知识点:spring cloud netflix 系列技术栈 在spring cloud netflix中使用ribbon和feign作为服务与服务之间的通信机制,这种通信方式是同步的HTTP通信方式,在大访问量的情况下会发生阻塞,直观体现就是标签页一直在等待响应,这就会有一个响应时间。而熔断器的作用就是:在发现服务不可用时,立即做出反应,避免请求一直处于等待响应的状态,从而避免出现响应...

weixin_41756573的博客 269

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

微服务Spring Cloud相关介绍及基础服务组件Nacos、Feign、Hystrix熔断器

目录一、什么是微服务1、微服务的由来2、为什么需要微服务3、微服务与单体架构区别4、微服务本质5、什么样的项目适合微服务6、微服务开发框架7、什么是Spring Cloud8、Spring Cloud和Spring Boot是什么关系9、Spring Cloud相关基础服务组件10、Spring Cloud的版本二、Nacos1、基本概念2、Nacos下载和安装3、服务注册三、Feign1、基本概念二、实现服务调用三、Hystrix基本概念1、Spring Cloud调用接口过程2、Hystrix概念四、f

qq_45491549的博客 939

Spring Cloud中Hystrix、Ribbon及Feign的熔断关系是什么?

导读 今天和大家聊一聊在Spring Cloud微服务框架实践中,比较核心但是又很容易把人搞得稀里糊涂的一个问题,那就是在Spring Cloud中Hystrix、Ribbon以及Feign它们三者之间在处理微服务调用超时从而触发熔断降级的关系是什么? 我们知道在Spring Cloud微服务体系下,微服务之间的互相调用可以通过Feign进行声明式调用,在这个服务调用过程中Feign...

无敌码农 842

开启一个spring cloud 工程 -第六步Feign 声明式接口调用以及使用Hystrix的熔断实现

Feign 什么是Feign Feign 与Ribbon 一样,Feign也是有Netflix 提供的,Feign是一个声明式、模块化的Web Service 客户端,它简化了开发者编写Web服务客户端的操作,开发者可以通过简单的接口和注解来调用HTTP API,Spring Cloud Feign,它整合了Ribbon 和Hystrix ,具有可插拔、基于注解、负载均衡、服务熔断等一系列便捷功能。 相比较于Ribbon +RestTemplate 的方式,Feign 大大简化了代码的开发,Feign

chenmaolin928的博客 418
上一篇: springcloud + ribbon重试策略
下一篇: mysql 数据库索引b+树深度问题
小涛_foxiaotao
博客等级 码龄14年 2粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值