springcloud第4季 springcloud-alibaba之openfegin+sentinel整合案例

发布于:2024-06-26 ⋅ 阅读:(44) ⋅ 点赞:(0)

一  介绍说明

1.1 说明

1.1.1 消费者8081

1.1.2 openfegin接口

1.1.3 提供者9091

9091微服务满足:

1 openfegin 配置fallback逻辑,作为统一fallback服务降级处理。

2.sentinel访问触发了自定义的限流配置,在注解@sentinelResource里面配置blockhandler方法。

二 实操案例

2.1 consumer案例配置

2.1.1 pom配置

        <!--alibaba-sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- 引入自己定义的api通用包 -->
        <dependency>
            <groupId>com.jurf.ms.api</groupId>
            <artifactId>ms-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

2.1.2 业务代码

    @Resource
    private PayFeignSentinelApi payFeignSentinelApi;
//    @Autowired
//   private OpenFeginApi openFeingApi;
    @GetMapping(value = "/consumer/pay/nacos/get/{orderNo}")
    public ResultData getPayByOrderNo(@PathVariable("orderNo") String orderNo)
    {
       return payFeignSentinelApi.getPayByOrderNo(orderNo);
     //   return openFeingApi.getPayByOrderNo(orderNo);
    }

2.1.3 配置文件

2.1.4 启动配置

2.2 openfegin-api的配置

2.2.1 pom文件

    <!--openfeign-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!--alibaba-sentinel-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>

2.2.2 业务代码

1.代码接口: 注意这里要配置成访问服务的服务名称,和nacos的服务名一致。

/**
 * @auther zzyy
 * @create 2024-01-05 13:05
 */
@FeignClient(value = "ms-alibaba-provider9091",contextId = "ms-alibaba-provider9091-1",fallback = PayFeignSentinelApiFallBack.class)
public interface PayFeignSentinelApi
{
    @GetMapping(value = "/pay/nacos/get/{orderNo}")
    public ResultData getPayByOrderNo(@PathVariable("orderNo") String orderNo);
}

2.fallback实现类

@Component
public class PayFeignSentinelApiFallBack implements PayFeignSentinelApi
{
    @Override
    public ResultData getPayByOrderNo(String orderNo)
    {
        return ResultData.fail(ReturnCodeEnum.RC500.getCode(),"对方服务宕机或不可用,FallBack服务降级o(╥﹏╥)o");
    }
}

2.3  提供配置

2.3.1 pom配置

    <!--openfeign-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!--alibaba-sentinel-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>

2.3.2 业务实现

    //openfeign+sentinel进行服务降级和流量监控的整合处理case
    @GetMapping(value = "/pay/nacos/get/{orderNo}")
    @SentinelResource(value = "getPayByOrderNo",blockHandler = "handlerBlockHandler")
    public ResultData getPayByOrderNo(@PathVariable("orderNo") String orderNo)
    {
        //模拟从数据库查询出数据并赋值给DTO
        PayDTO payDTO = new PayDTO();

        payDTO.setId(1024);
        payDTO.setOrderNo(orderNo);
        payDTO.setAmount(BigDecimal.valueOf(9.9));
        payDTO.setPayNo("pay:"+ IdUtil.fastUUID());
        payDTO.setUserId(1);

        return ResultData.success("查询返回值:"+payDTO);
    }
    public ResultData handlerBlockHandler(@PathVariable("orderNo") String orderNo, BlockException exception)
    {
        return ResultData.fail(ReturnCodeEnum.RC500.getCode(),"getPayByOrderNo服务不可用," +
                "触发sentinel流控配置规则"+"\t"+"o(╥﹏╥)o");
    }

2.3.3 配置

2.4  服务启动

1.nacos启动

2.sentinel启动

3.应用服务启动

2.5 验证访问

1.消费者: http://localhost:8081/consumer/pay/nacos/get/999

2.提供者:http://localhost:9091/pay/nacos/get/222

3.验证blockhandler

a) sentinel配置

b)频繁刷新访问: 提示sentinel流控规则访问

 4.验证fallback

关闭9091服务提供者

再次访问:提示fallback异常提示。


网站公告

今日签到

点亮在社区的每一天
去签到