SpringCloud05_Hystrix的概述、案例详解、服务降级、服务熔断、服务监控hystrixDashboard(五)

简介: ⑤. 服务降级(cloud-provider-hystrix-payment8001)⑥. 服务降级(cloud-consumer-feign-hystrix-order80)

⑤. 服务降级(cloud-provider-hystrix-payment8001)


  • ①. 在主启动类上添加注解:@EnableCircuitBreaker(开启服务降级)


  • ②. 在service中添加服务降级的方法
    (我们设置了3s之内是正常的,如果超过了3s就有兜底的方法)


  @HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler",commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="5000")
    })
    public String paymentInfo_TimeOut(Integer id){
        int timeNumber =3 ;
        //int age=10/0;
        try { TimeUnit.SECONDS.sleep(timeNumber); }catch (Exception e) {e.printStackTrace();}
        return "线程池:"+Thread.currentThread().getName()+"   paymentInfo_TimeOut,id:  "+id+"\t"+"呜呜呜"+" 耗时(秒)"+timeNumber;
    }
    public String paymentInfo_TimeOutHandler(Integer id){
        return "线程池:"+Thread.currentThread().getName()+"   paymentInfo_TimeOutHandler,id:  "+id+"\t"+"O(∩_∩)O"  ;
    }


③. 一旦调用服务方法失败并抛出了错误信息后,会自动调用@HystrixCommand标注好的fallbackMethod调用类中的指定方法


微信图片_20220108172512.png


⑥. 服务降级(cloud-consumer-feign-hystrix-order80)


  • ①. 80订单微服务,也可以更好的保护自己,自己也依样画葫芦进行客户端降级保护
    (我们自己配置过的热部署方式对java代码的改动明显,但对@HystrixCommand内属性的修改建议重启微服务)


  • ②. yaml


feign:
  hystrix:
    enabled: true #如果处理自身的容错就开启。开启方式与生产端不一样。


  • ③. 主启动类上添加 @EnableHystrix


  • ④. 在controller中添加如下方法进行兜底处理


 @GetMapping("/consumer/hystrix/timeout/{id}")
 @HystrixCommand(fallbackMethod = "paymentTimeOutFallbackMethod",commandProperties = {
         @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")
 })
 //@HystrixCommand
 //这里设置的时间是1.5s,就是说调用服务会等待1.5s,如果超过了就会走fallbackMethod方法
 //而我们在支付的微服务中,时间是3s
 public String paymentInfo_TimeOut(@PathVariable("id") Integer id) {
     return paymentHystrixService.paymentInfo_TimeOut(id);
 }
 public String paymentTimeOutFallbackMethod(@PathVariable Integer id) {
     return "我是消费者80,对方支付系统繁忙请10分钟后再试或者自己运行出错请检查自己!";
 }


⑤. 我们在8001端进行了3s的延迟处理,这里80端去调用8001端的时候,如果超过了1.5s就会走兜底的方法


微信图片_20220108172609.png


⑦. 目前的问题

每个业务方法对应一个兜底的方法,代码膨胀

统一和自定义的分开


⑧. 解决办法在controller类中添加上@DefaultProperties(defaultFallback=" “)

每个方法配置一个服务降级方法,技术上可以,实际上不合理

除了个别重要核心业务有专属,其他普通的可以通过@DefaultProperties(defaultFallback=”")统一跳转



微信图片_20220108172624.png


@RestController
@Slf4j
@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")
public class OrderHystrixController {
    @Resource
    private PaymentHystrixService paymentHystrixService;
    /*1>.OK*/
    @GetMapping("/consumer/hystrix/ok/{id}")
    public String paymentInfo_OK(@PathVariable("id") Integer id) {
        return paymentHystrixService.paymentInfo_OK(id);
    }
    /*2>.timeOut*/
    @GetMapping("/consumer/hystrix/timeout/{id}")
//    @HystrixCommand(fallbackMethod = "paymentTimeOutFallbackMethod",commandProperties = {
//            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")
//    })
    @HystrixCommand //
    //这里设置的时间是1.5s,就是说调用服务会等待1.5s,如果超过了就会走fallbackMethod方法
    //而我们在支付的微服务中,时间是3s
    public String paymentInfo_TimeOut(@PathVariable("id") Integer id) {
        return paymentHystrixService.paymentInfo_TimeOut(id);
    }
    public String paymentTimeOutFallbackMethod(@PathVariable Integer id) {
        return "我是消费者80,对方支付系统繁忙请10分钟后再试或者自己运行出错请检查自己!";
    }
    //globol fallback
    //下面是全局fallback方法
    public String payment_Global_FallbackMethod() {
        return "Global异常处理信息,请稍后再试!!";
    }
}


微信图片_20220108172702.png



相关文章
|
5月前
|
负载均衡 算法 Java
【SpringCloud(4)】OpenFeign客户端:OpenFeign服务绑定;调用服务接口;Feign和OpenFeign
Feign是一个WebService客户端。使用Feign能让编写WebService客户端更加简单。 它的使用方法是定义一个服务接口然后再上面添加注解。Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,十七支持了SpringMVC标准注解和HttpMessageConverters。 Feign可用于Eureka和Ribbon组合使用以支持负载均衡
797 138
|
存储 数据可视化 Java
基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪
Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。
787 2
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
603 3
|
存储 NoSQL 调度
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
893 23
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
250 1
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
12月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
4537 2