版权声明:本站所提供的文章资讯、软件资源、素材源码等内容均为本作者提供、网友推荐、互联网整理而来(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考,如有侵犯您的版权,请联系我,本作者将在三个工作日内改正。 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);
}
}
访问,拥挤情况如下:
不拥挤情况如下: