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

可能这个版本比较旧了,有机会自己去研究新的东西了

posted @ 2021-05-12 18:47  野兽Gentleman  阅读(58)  评论(0编辑  收藏  举报