springCloud Hystrix学习
首先做熔断
在我之前的项目基础上做了一些添加
我需要在服务者的pom.xml添加hysteix的依赖
<!-- hystrix--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.4.6.RELEASE</version> </dependency>
然后在启动类上添加对熔断的注解
@SpringBootApplication @EnableEurekaClient // 在服务启动后自动组成到Eureka中 @EnableDiscoveryClient // 服务发现 @EnableCircuitBreaker //添加对熔断的支持 public class DpetproviderHystrix_8001 { public static void main(String[] args) { SpringApplication.run(DpetproviderHystrix_8001.class, args); } }
这个时候如果我们的某个服务出现了问题,可以通过添加注解的方式来返回
@RestController public class DeptController { @Autowired private DeptService deptService; @PostMapping("dept/add") public boolean addDept(Dept dept) { return deptService.addDept(dept); } @HystrixCommand(fallbackMethod = "queryByIdHysteix") @GetMapping("dept/queryById/{id}") public Dept queryById(@PathVariable Long id) { Dept dept = deptService.queryById(id); if (dept == null) { throw new RuntimeException("不存在该用户,或者信息无法找到"); } return dept; } @GetMapping("dept/queryAll") public List<Dept> queryAll() { return deptService.queryAll(); } public Dept queryByIdHysteix(@PathVariable Long id) { return new Dept().setDeptno(id).setDname("不存在该用户,或者信息无法找到@Hysteix").setDb_source("找不到这个数据库@Hysteix"); } }
这是一个比较简单的操作,基本没什么难度
--服务降级--
# 开启服务降级
feign:
hystrix:
enabled: true
首先在feign的消费者这里配置开启服务降级
@Component public class DeptClientServiceFallbackFactory implements FallbackFactory { @Override public DeptClientService create(Throwable cause) { return new DeptClientService() { @Override public boolean addDept(Dept dept) { return false; } @Override public Dept queryById(Long id) { return new Dept().setDeptno(id).setDname("不存在该用户,或者信息无法找到@ 服务降级").setDb_source("找不到这个数据库@服务降级"); } @Override public List<Dept> queryAll() { Dept dept = new Dept().setDeptno(1).setDname("不存在该用户,或者信息无法找到@ 服务降级").setDb_source("找不到这个数据库@服务降级"); List<Dept> deptList = new ArrayList<>(); deptList.add(dept); return deptList; } }; } }
然后实现 FallbackFactory 并且在service中配置
@Component @FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = DeptClientServiceFallbackFactory.class) public interface DeptClientService { @RequestMapping("/dept/add") public boolean addDept(Dept dept); @RequestMapping("/dept/queryById/{id}") public Dept queryById(Long id); @RequestMapping("/dept/queryAll") public List<Dept> queryAll(); }
如果我们的服务者挂掉了就会提示我们服务降级
开启监控
导入监控的依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>1.4.6.RELEASE</version> </dependency>
配置监控的注解
@SpringBootApplication @EnableHystrixDashboard // 开启监控页面 public class DeptConsumerDashboard_9001 { public static void main(String[] args) { SpringApplication.run(DeptConsumerDashboard_9001.class, args); } }
在服务者打开监控
@SpringBootApplication
@EnableEurekaClient // 在服务启动后自动组成到Eureka中
@EnableDiscoveryClient // 服务发现
@EnableCircuitBreaker //添加对熔断的支持
public class DpetproviderHystrix_8001 {
public static void main(String[] args) {
SpringApplication.run(DpetproviderHystrix_8001.class, args);
}
// 增加一个servlet
@Bean
public ServletRegistrationBean hystrixMetricsStreamServlet() {
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
registrationBean.addUrlMappings("/actuator/hystrix.stream");
return registrationBean;
}
}
得到结果如上
最后完整的项目
https://files.cnblogs.com/files/beastGentleman/springCloud%E5%AE%8C%E7%BB%93.zip
可能这个版本比较旧了,有机会自己去研究新的东西了