springcloud微服务(十九) - Hystrix服务端和消费端的服务降级

本文介绍了服务端和客户端如何实现服务降级,以提高系统的容错性和稳定性。通过@HystrixCommand注解配置超时和回退方法,当服务调用超时时,触发回退逻辑,返回兜底信息。在服务端,8002服务设置了超时和回退方法,确保超过峰值时间能正常处理。而在客户端,通过启用@EnableHystrix并在控制器中使用@HystrixCommand进行降级处理,确保在服务异常时返回友好的提示信息。
摘要由CSDN通过智能技术生成

一、服务端8002服务降级

降级配置:@HystrixCommand

(一)8002存在的问题:

设置自身调用超时时间的峰值,峰值内可以正常运行,超过了需要有兜底的方法处理,做服务降级fallback。

(二)、8002fallback

2.1 主启动类激活

添加新注解@EnableHystrix,我们可以看到@EnableCircuitBreaker已经被标注删除线,但是@EnableHystrix集成了@EnableCircuitBreaker注解。

@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class HystrixPayment8002 {
    public static void main(String[] args)
    {
        SpringApplication.run(HystrixPayment8002.class,args);
    }
}

2.2 在service的类上添加@HystrixCommand注解

@Service
public class HystrixPaymentService {

    public String paymentInfo_ok(Integer id)
    {
        return "线程池:"+Thread.currentThread().getName()+"  paymentInfo_ok,id="+id+"\t"+"成功";
    }

    //模拟业务流程长,耗时长
    @HystrixCommand(fallbackMethod = "paymentInfo_timeouthandle",commandProperties = {
        @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value = "3000")
    })
    public String paymentInfo_timeout(Integer id)  {
        int time=5;
        try {
            TimeUnit.SECONDS.sleep(time);
        }catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        return "线程池:"+Thread.currentThread().getName()+"  paymentInfo_timeout,id="+id+"\t"+"超时";
    }
    public String paymentInfo_timeouthandle(Integer id)  {

        return "支付系统忙,请稍后再试";
    }
}

注意:回退方法paymentInfo_timeouthandle必须与原方法的参数保持完全一致(参数个数与类型),否则会报错

com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionException: fallback method wasn't found

(三)、测试

请求http://127.0.0.1:8002/payment/info/timeout/667

3秒钟后会有收到应答,调用的回退函数生效。

(四)、异常时也会调用回退方法

二、客户端服务降级

(一)一般情况是客户端做服务降级,对客户端做保护

(二)主启动类加注解@EnableHystrix

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableHystrix
public class OpenFeignHystrixOrder80 {
    public static void main(String[] args)
    {
        SpringApplication.run(OpenFeignHystrixOrder80.class,args);
    }
}

(三)业务类加@HystrixCommand注解

@RestController
public class HystrixOrderController {

    @Autowired
    private HystrixPaymentService hystrixPaymentService;

    @GetMapping("/consumer/payment/info/ok/{id}")
    public String paymentInfo_ok(@PathVariable("id") Integer id)
    {
        return hystrixPaymentService.paymentInfo_ok(id);
    }

    //模拟业务流程长,耗时长
    @GetMapping("/consumer/payment/info/timeout/{id}")
    @HystrixCommand(fallbackMethod = "paymentInfo_timeoutFallback",commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3000")
    })
    public String paymentInfo_timeout(@PathVariable("id") Integer id)
    {
        return hystrixPaymentService.paymentInfo_timeout(id);
    }
    public String paymentInfo_timeoutFallback(Integer id)
    {
        return "消费端80,支付系统异常,请稍后再试";
    }
}

(四)测试

请求http://127.0.0.1/consumer/payment/info/timeout/667

3秒钟后会有收到应答,调用的回退函数生效。

(五)异常时也会调用回退方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值