SpringCloud集成Hystrix熔断器

摘要:

熔断器的存在就是为了保证在微服务的调用链中,一旦有某个节点发生故障就立即切断服务并返回托底数据,不至于因为这个节点的故障而将整个微服务拖垮【熔断机制、快速失败、服务降级、服务监控】

==================================Ribbon使用熔断器===================================

一:引入依赖

<!--Hystrix依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

二:在启动类上打上注解@EnableCircuitBreaker开启熔断器的支持

三:在需要熔断的接口方法上打上注解@HystrixCommand(fallbackMethod = "熔断方法")

四:在本接口的同一类中编写熔断方法即可

 //降级方法,参数和返回值必须和被熔断的方法一致 ,方法名要和fallbackMethod的值一致
    public User getUserHystrix(){
        return new User(1l,"熔断器触发",1);
    }

==================================OpenFeign使用熔断器===================================

由于OpenFeign是集成了熔断器Hystrix,所以不需要引依赖

一:在application.yml中开启熔断器支持

feign:
    hystrix:
        enabled:true #开启熔断支持
ribbon:
    ReadTimeout: 1000 #读取时间
    SocketTimeout: 1000 #响应时间
    ConnectTimeout: 1000 #连接时间
hystrix:
    command:
        default:
            execution:
                isolation:
                    thread:
                        timeoutInMilliseconds: 4000 #超时熔断

二:创建托底数据工厂类

package cn.ybl.FeignClient;

import cn.ybl.pojo.User;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;

/**
 * 托底工厂类
 */
@Component
public class UserFeignClientFallbackFactory implements FallbackFactory<UserFeignClient> {

    /**
     * 生产托底类的方法,需要使用匿名内部类的方式,返回要托底接口的实现类,实现类方法就是托底方法
     * @param throwable
     * @return
     */
    @Override
    public UserFeignClient create(Throwable throwable) {
        return new UserFeignClient() {   //UserFeignClient为需要熔断机制的OpenFeign客户端
            @Override
            public User getUser() {      
                return new User(-1L, "触发熔断了", 1);
            }
        };
    }
}

三:在OpenFeign客户端的接口上打上注解,指向此工厂类

package cn.ybl.FeignClient;

import cn.ybl.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * UserServer的feign客户端
 */
//调用的服务的应用名称,指定托底工厂类UserFeignClientFallbackFactory
@FeignClient(value = "UserServer",fallbackFactory = UserFeignClientFallbackFactory.class)
public interface UserFeignClient {

    /**
     * 方法名称必须跟被代理服务接口方法名称一致
     * 请求路径必须跟被代理服务接口一致
     * 参数与返回值必须跟被代理服务接口一致
     * ——————————————————建议直接复制过来删掉方法体
     */
    @GetMapping
    User getUser();
}

当UserServer服务发生异常或连接超时时会自动触发熔断并返回托底数据

posted @   yyybl  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示