Hystrix熔断器原理、应用

本文介绍了解决雪崩问题的两种方案:熔断和服务降级,详细讲解了熔断器的应用场景及其实现方法,包括在Spring Cloud中如何配置和使用Hystrix实现熔断,以及具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

熔断器用于解决雪崩问题:
什么是雪崩问题?

解决方案2种;
1、熔断
2、服务降级

熔断器的应用场景:
控制用户精确访问,譬如VIP 账号访问资源的等等、权限控制;
源码分享:
https://github.com/medoo-Ai/cloud-demo1

1、consumer 消费者中添加依赖:
2、在main 函数中添加 @EnableCircuitBreaker // 添加Hystrix 的注解;
由于consumer消费者主函数上注解较多,使用@SpringCloudApplication 代替组合注解,
@SpringCloudApplication源码如下:

/**
 * @author Spencer Gibb
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public @interface SpringCloudApplication {
}
  <!-- 熔断器-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

3、yml文件中配置熔断的默认时间 2s:

server:
  port: 8080
spring:
  application:
    name: consumer-demo
eureka:     #  eureka服务发现
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
    registry-fetch-interval-seconds: 10  #  默认的 服务消费每个30s  更新数据到本地
  instance:
    instance-id: ${spring.application.name}:${server.port}
hystrix:
  command:
    default:
      execution:
       isolation:
        thread:
          timeoutInMilliseconds: 2000  # 设置默认2s

controller 中进行熔断提示:


@RestController
@RequestMapping("consumer")
@DefaultProperties(defaultFallback = "getFallBack")   //指定统一的服务降级的方法
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    @HystrixCommand
    @GetMapping("{id}")
    public String get(@PathVariable("id") Long id) {
        String url = "http://user-service/user/" + id;
        return restTemplate.getForObject(url, String.class);
    }

    public String getFallBack() {
        return "网络太拥挤了";  // 默认访问时长1s  ,可以设置配置为2s
    }
}

主函数如下:

@SpringCloudApplication
public class ConsumerApplication {
    @Bean
    @LoadBalanced   //添加负载均衡
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }
}

访问,拥挤情况如下:
1
不拥挤情况如下:
567

源码分享:
https://github.com/medoo-Ai/cloud-demo1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值