• Hystrix熔断降级


    目录

    项目实战

     Hystrix技术点


    开门见山,和Sentinel一样解决了我们的项目中因为级联失败而导致服务雪崩现象

    解决:

    1.流量控制

    进行限流,QPS

    2.缓存

    对可能频繁访问的数据加入缓存中,减少数据库的压力

    3.服务熔断降级

    服务接口拒绝服务,本质就是我们的断路器限制我们的服务请求访问

    项目实战

    @EnableCircuitBreaker:启用断路器

    @EnableHystrixDashboard:启用Hystrix 

    1. @EnableDiscoveryClient
    2. @EnableCircuitBreaker//启用断路器
    3. @SpringBootApplication
    4. @SpringCloudApplication
    5. @EnableHystrixDashboard
    6. public class MicroserviceProviderHystrixApplication {
    7. public static void main(String[] args) {
    8. SpringApplication.run(MicroserviceProviderHystrixApplication.class, args);
    9. }
    10. }

    1.依赖 

    1. <dependencies>
    2. <dependency>
    3. <groupId>com.baomidougroupId>
    4. <artifactId>mybatis-plus-boot-starterartifactId>
    5. <version>3.4.2version>
    6. dependency>
    7. <dependency>
    8. <groupId>mysqlgroupId>
    9. <artifactId>mysql-connector-javaartifactId>
    10. dependency>
    11. <dependency>
    12. <groupId>org.springframework.cloudgroupId>
    13. <artifactId>spring-cloud-starter-netflix-hystrixartifactId>
    14. dependency>
    15. <dependency>
    16. <groupId>org.springframework.cloudgroupId>
    17. <artifactId>spring-cloud-starter-openfeignartifactId>
    18. dependency>
    19. <dependency>
    20. <groupId>org.springframework.cloudgroupId>
    21. <artifactId>spring-cloud-starter-netflix-hystrix-dashboardartifactId>
    22. dependency>
    23. <dependency>
    24. <groupId>org.springframework.bootgroupId>
    25. <artifactId>spring-boot-starter-actuatorartifactId>
    26. dependency>
    27. <dependency>
    28. <groupId>org.springframework.bootgroupId>
    29. <artifactId>spring-boot-starter-testartifactId>
    30. <scope>testscope>
    31. <exclusions>
    32. <exclusion>
    33. <groupId>org.junit.vintagegroupId>
    34. <artifactId>junit-vintage-engineartifactId>
    35. exclusion>
    36. exclusions>
    37. dependency>
    38. <dependency>
    39. <groupId>org.projectlombokgroupId>
    40. <artifactId>lombokartifactId>
    41. dependency>
    42. dependencies>

    2.mapper

    1. @Mapper
    2. public interface ProductMapper extends BaseMapper {
    3. }

    3.service

    在业务接口上指定异常回退

    1. //在业务接口上指定异常处理类
    2. @FeignClient(name = "microservice-provider-hystrix",fallbackFactory = IProductClientServiceFallbackFactory.class)
    3. public interface IProductService extends IService {
    4. Product getProductById(Integer id);
    5. }
    1. @Service
    2. public class ProductService extends ServiceImpl implements IProductService{
    3. @Override
    4. public Product getProductById(Integer id) {
    5. Product product = baseMapper.selectById(id);
    6. return product;
    7. }
    8. }

    3.控制层

    @HystrixCommand(fallbackMethod="xxx"):当方法抛出异常进行熔断降级处理方法

    1. @RestController
    2. public class ProductController {
    3. @Autowired
    4. private ProductService productService;
    5. @GetMapping("{id}")
    6. @HystrixCommand(fallbackMethod ="errorCallBack")
    7. public Object get(@PathVariable("id") Integer id){
    8. Product p = productService.getProductById(id);
    9. if(p==null){
    10. throw new RuntimeException("查无此商品");
    11. }
    12. return new JsonResult(200,p);
    13. }
    14. /**
    15. * 熔断降级的方法
    16. */
    17. public Object errorCallBack(@PathVariable("id") Integer id){
    18. return id+"不存在,error";
    19. }
    20. }

    4.FailBackFactory实现类

    这个需要导入feign,在FeiginClient中,可以制定fallback实现服务不可以用时自动调用fallback指定处理方法

    1. @Component
    2. public class IProductClientServiceFallbackFactory implements FallbackFactory {
    3. @Override
    4. public IProductService create(Throwable throwable) {
    5. //回退机制
    6. return new IProductService() {
    7. @Override
    8. public Product getProductById(Integer id) {
    9. Product product = new Product();
    10. product.setCategoryId(999999);
    11. product.setPrice(99999999L);
    12. return product;
    13. }
    14. @Override
    15. public boolean saveBatch(Collection entityList, int batchSize) {
    16. return false;
    17. }
    18. @Override
    19. public boolean saveOrUpdateBatch(Collection entityList, int batchSize) {
    20. return false;
    21. }
    22. @Override
    23. public boolean updateBatchById(Collection entityList, int batchSize) {
    24. return false;
    25. }
    26. @Override
    27. public boolean saveOrUpdate(Product entity) {
    28. return false;
    29. }
    30. @Override
    31. public Product getOne(Wrapper queryWrapper, boolean throwEx) {
    32. return null;
    33. }
    34. @Override
    35. public Map getMap(Wrapper queryWrapper) {
    36. return null;
    37. }
    38. @Override
    39. public V getObj(Wrapper queryWrapper, Functionsuper Object, V> mapper) {
    40. return null;
    41. }
    42. @Override
    43. public BaseMapper getBaseMapper() {
    44. return null;
    45. }
    46. @Override
    47. public Class getEntityClass() {
    48. return null;
    49. }
    50. };
    51. }
    52. }

     Hystrix技术点

    1.快速失败并且迅速恢复

    2.优雅降级

    3.实施实时监控

    将外部服务包装到HystrixCommand对象中,并单独线程中处理

    服务错误百分比超过了阈值,熔断器开关自动打开,一段时间内停止对该服务的所有请求。

    (37条消息) 微服务熔断机制 Hystrix_STRANG-P的博客-CSDN博客

  • 相关阅读:
    读书笔记:Effective C++ 2.0 版,条款43(多继承)、条款44(概念明确)、条款45-50(杂项)
    2001-2022年上市公司利润表数据
    网络安全(黑客)自学
    黑马VUE3视频笔记
    聊聊如何利用p6spy进行sql监控
    123. 买卖股票的最佳时机 III
    华为云云耀云服务器L实例评测|深度体验云耀云服务器购买和Ubuntu环境性能压力评测
    python数据类型的操作与运算符的使用
    原码 反码 补码
    基于腾讯元器搭建前端小助手
  • 原文地址:https://blog.csdn.net/weixin_57128596/article/details/127112240