首页 > 其他分享 >Hystrix(服务熔断)+Feign和FallbackFactory(服务降级)

Hystrix(服务熔断)+Feign和FallbackFactory(服务降级)

时间:2023-05-24 17:15:16浏览次数:28  
标签:Feign Hystrix FallbackFactory spring boot 熔断 服务器 org starter

分布式系统面临的服务雪崩问题

当用户发起请求时,假设处理请求的服务器1运行时需要调用到服务器2,服务器2运行时需要调用到服务器3,而如果服务器2因为某些原因始终不能正常调用到服务器3,这时候后面其他用户的请求也都会阻塞在服务器1,在并发量极大的情况下容易导致多个服务器崩溃已经许多其他级联问题的发生,这就是服务雪崩。

 测试熔断机制,

为了方便后续复习,直接新建一个有熔断机制的provider8001模块:

步骤:导包->

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.lian</groupId>
    <artifactId>springcloud-provider-dept-hystrix-8001</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.1.2.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.1.2.RELEASE</version>
        </dependency>
        <!--        #监视器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>


        <dependency>
            <groupId>org.example</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>

        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>

        <!--        spring-boot-test-->
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.1.4.RELEASE</version>
            <scope>test</scope>
        </dependency>



        <!--        jetty-->
        <!--        热部署-->

    </dependencies>

</project>

 

2.只测试一个get/id的方法,方便对比,在controller类添加备选方法,像我们原来如果没有添加这个备选方法,那么在用户请求不存在的id时,前端就会报错,现在我们有了这个备选方法,当用户请求不存在的id时,前端会打印出提示信息。

 

3。主启动类开启熔断注解

 

4.测试访问成功:

当我们访问不存在的id时前端打印提示信息

 服务降级

 

 

 

客户端从整体网站请求负载考虑,当某个服务熔断或者关闭之后,服务将不再被调用,此时在客户端,我们可以准备一个FallbackFactory,返回一个默认的值,整体的服务水平下降了,但是系统还能正常运行。注意:服务熔断是在服务端操作的,但是服务降级是在客户端操作的

 

 1.springcloud-api写一个降级类

 

2.在springcloud-api模块的service目录下的接口要绑定我们写的降级类

 3.在消费者模块的配置文件中增加服务降级的配置

 

 

4.启动测试

未关闭后端的provider时若前端访问空白的用户id,则网页没有报错只是空白

关闭后端的provider后的页面提示

 

 

标签:Feign,Hystrix,FallbackFactory,spring,boot,熔断,服务器,org,starter
From: https://www.cnblogs.com/MyBlogs-joyiyii/p/17418613.html

相关文章

  • Field userClient in com.demo.order.service.OrderService required a bean of type'
    在SpringCloud项目中使用Feign进行远程调用遇到的错误。原因是因为UserClient在com.demo.feign.clients包下面,而order-service的@EnableFeignClientd注解却在com.demo.order包下面,这两个不在同一个包下,无法扫描到UserClient。解决方法有两种1.指定Feign应该扫描的包@EnableFeig......
  • 远程调用——Feign
    使用RestTemplate发起远程调用存在的问题1.代码可读性差,编程体验不统一2.参数复杂URL难以维护Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign。其作用就是帮助我们优雅的实现http请求的发送,解决RestTemplate的问题。使用步骤1.引入依赖点击查看......
  • 微服务使用openfeign调用单点的会话失效问题
    项目Springcloud,认证中心方式实现SSO使用开源框架Sa-Token本身的单独访问每个客户端服务的单点就没有问题。然后单点通过Fegin调用就不好使了!主要使用的Sa-Token的微服务单点功能使用的依赖如下<!--SA-TokenSSO--><dependencyManagement><dependencies>......
  • 聊聊我认为的OpenFeign
    此篇文章不从源码角度解析,网上一搜一大把。我个人的习惯是自己评估与思考下大概的设计思路是什么,然后看源码与博客佐证。否则一来就是使用然后看源码,一坨一坨的代码,真的看的头疼。以上仅是个人的学习方法。聊聊OpenFeign,其实这个框架,之前用过,但没留意太多;说白了这个框架的出现就......
  • 调用外部接口方法之一 —— Feign 声明式调用
    1、需求调用处理中心提供的接口,将数据处理同步到其他系统中。2、实现2.1、添加相关依赖<!--Feign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.1.1.RELEAS......
  • Feign远程调用丢失请求头的问题
    前言:我们在写服务端项目的时候,总会限制对某些资源的访问,最常见的就是要求用户先登录才能访问资源,当用户登录后就会将此次会话信息保存进session,同时返回给浏览器指定的cookie键值,下次浏览器再次访问,请求头中就会携带这个cookie,我们也以次来识别用户的登录状态,做出正确响应。问......
  • Feign与RestTemplate的区别
    微服务之间的通信方式常见的方式有两种:RPC——代表-dubboHTTP——代表-SpringCloud在SpringCloud中,默认是使用http来进行微服务的通信,最常用的实现形式有两种:RestTemplateFeignFeign跟RestTemplate的区别请求方式不一样RestTemplate需要每个请求都拼接url+参数+......
  • Feign Method Timeout 配置
    项目背景这个应用是微服务架构,使用Springboot+Springcloud,其中Springcloud部分使用了openfeign来实现通讯交互。项目结构层次,我们将一个微服务暴力的拆分成两个模块:xxx-api/xxx-server,xxx-api是用来发布交互的接口,xxx-server模块是用来运行web服务。对于xxx-api模块,我们根据业务......
  • 从0开始搭建一个微服务项目(使用openfeign)
    本文发布时间:2023-05-05尚在学习当中,如有不足,请指正!!!项目结构本篇文章是之前项目的后续版本,前面的内容可看链接:从0开始搭建一个微服务项(并注册到nacos)_bgbgking的博客-CSDN博客因本篇内容较前篇跨幅较大,有兴趣可查看源码链接:spring-cloud-demo:springcloud基础架构及其......
  • feign调用报错status 404
    feign调用报错status404使用feign,报错:FeignException:status404。如下:Causedby:feign.FeignException:status404reading#; atfeign.FeignException.errorStatus(FeignException.java:62) atfeign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:91) atfe......