Hystrix熔断器原理、应用

版权声明:本站所提供的文章资讯、软件资源、素材源码等内容均为本作者提供、网友推荐、互联网整理而来(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考,如有侵犯您的版权,请联系我,本作者将在三个工作日内改正。 https://blog.csdn.net/weixin_42323802/article/details/84641983

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

解决方案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

猜你喜欢

转载自blog.csdn.net/weixin_42323802/article/details/84641983
今日推荐