sentinel之整体流程整合(重要)

通过sentinelResouce的资源名实现了配置规则的兜底,将配置规则的兜底进行了抽取,避免冗余代码。通过OpenFeign实现了java异常的Fallback的兜底,将java异常的兜底进行了抽取,避免冗余代码。通过OpenFeign的接口+注解的调用实现了客户端的负载均衡,实现了远程调用的抽取,避免冗余代码。

1、整体流程整合

2、工程准备完成,保证84可以轮询访问9003和9004

9003和9004是服务提供者。消费者84,在消费者84进行服务限流、熔断、fallback等配置

常识:

3、因为fallback只管控java运行异常,blockHandler只管空sentinel配置异常。当blockHandler和fallbackHandler都配置情况下,有异常没有限流走fallbackHandler,有限流有异常走blockHandler

    @RequestMapping("/consumer/fallback/{id}")
    @SentinelResource(value = "fallback", fallback = "handlerFallback", blockHandler = "blockHandler")  //fallback和blockHandler 都配置
    public CommonResult<Payment> fallback(@PathVariable("id") Long id) {

        CommonResult<Payment> result = restTemplate.getForObject(SERVICE_URL + "/paymentSQL/" + id, CommonResult.class, id);

        if (id == 4) {
            throw new IllegalArgumentException("IllegalArgumentException,非法参数异常");
        } else if (result.getData() == null) {
            throw new NullPointerException("NullPointerException,该ID没有对应记录,空指针异常");
        }
        return result;
    }

    /**
     * 本例子是 fallback handlerFallback
     *
     * @param id
     * @param e
     * @return
     */
    public CommonResult handlerFallback(@PathVariable("id") Long id, Throwable e) {
        Payment payment = new Payment(id, "null");
        return new CommonResult(444, "兜底异常handlerFallback,exception内容" + e.getMessage(), payment);
    }

//--------------------------------- OpenFeign ---------------------------------

    /**
     * 本例子是 blockHandler
     *
     * @param id
     * @param blockException
     * @return
     */
    public CommonResult blockHandler(@PathVariable("id") Long id, BlockException blockException) {
        Payment payment = new Payment(id, "null");
        return new CommonResult(445, "blockHandler-sentinel限流,无此流水:blockException" + blockException.getClass().getCanonicalName(), payment);
    }

访问:http://localhost:84/consumer/fallback/5 

超过限流则会走blockHandler

结果:

4、对openFiegn的整合(去掉了ribbon和restTemplate的调用,改用接口加注解的方式调用),后续不再使用ribbon了,只掌握openFeign的使用就好

(1)、maven的添加openFeign

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

(2)、主启动类的添加配置

(3)、controller代码,主要是sentinel的配置

@GetMapping(value = "/consumer/paymentSQL/{id}")
@SentinelResource(value = "blockHandler",blockHandler = "blockHandler")    //它实现了配置违规,包括限流、熔断、热点规则等问题
public CommonResult<Payment> paymentSQL(@PathVariable("id") Long id) {
    return paymentService.PaymentSQL(id);
}

(4)、OpenFeign通过接口+注解的方式进行远程调用,实现了fallback的java代码端降级的功能的功能。openFeign通过接口的@FeignClient注解定义访问外部哪个服务,通过接口的方法定义访问外部服务哪个方法

@Service
public class PaymentFallbackServiceImpl implements PaymentService {
    @Override
    public CommonResult<Payment> PaymentSQL(Long id) {
        return new CommonResult<>(444444444, "服务降级返回,----PaymentFallbackServiceImpl", new Payment(id, "errorSerial"));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值