分布式的依赖 跟 服务器限流方法

1. 分布式依赖

        <!--seata 依赖(重要)-->
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
        </dependency>
        
       
        <!-- 这两个依赖和seata自动配置有关 生产者才用到的 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>

 2.限流依赖

       <!-- sentinel 这个是限流模块 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

 

3-1. 分别配置类 .yml 后缀方式

 
sentinel:
      transport:
        dashboard: localhost:8080  # 默认的端口 
        port: 8722     # 限流端口


seata:
  tx-service-group: camall-group  # 定义分支名称
  service:
    vgroup-mapping:
      csmall_grop: default # 使用seata 默认的分布式
    grouplist:
      default: localhost:8091 # 8091 是默认的地址 分布式的端口

3-2.分别配置类 . properties

spring.cloud.sentinel.transport.dashboard=localhost:8080  # 默认端口
spring.cloud.sentinel.transport.port=8721     # 限流端口

seata.tx-service-group=dubbo_stcok_seata    # 自定名 分组
seata.service.vgroup-mapping.dubbo_stcok_seate=default       # 默认分布式
seata.service.grouplist.default=localhost:8091    # 分布式端口

4.使用限流注解 (控制层)

@SentinelResource(value = "限制订单的限流(控制器)",blockHandler = "blocError")
    @ApiOperation("购买-订单")
    @PostMapping("/add")
    // @SentinelResource 该注解的方法会被 sentinel 监控
    // value 里面的内容是这个监控的名称
    // blockHandler 的值指定了请求被限流时运动的方法执行
    @SentinelResource(value = "限制订单的限流(控制器)",blockHandler = "blocError")
    public JsonResult OrderAdd(OrderAddDTO orderAddDTO){
        service.orderAdd(orderAddDTO);
        return JsonResult.ok("订单完成!");
    }

    /**
     *   Sentinel 限流方法应该满足如下要求
     *  1. 要求必须是public 修改
     *  2. 返回指类型必须和控制方法一致(JsonResult)
     *  3. 方法名称要和控制器方法限流注解中规定的名字一致(blocError)
     *  4. blockHandler 的值值指定了请求被限流时运动的方法名称
     */
    public JsonResult blocError(OrderAddDTO orderAddDTO, BlockException e){
        return JsonResult.failed(ResponseCode.BAD_REQUEST,"服务器忙,请稍后再试!.......");
    }

    /**
     *  这个方法是Sentinel 注解中fallback 属性指定的降级方法
     *   当前控制器方法运行发送异常时,sentinel 会运行下面的将级方法
     *   降低方法中,可以不直接结束请求,而去运行一些代替码或者补救措施
     *   让用户获得最低的相应,这个方法也可以添加异常常量
     */
    public JsonResult fallbackError(OrderAddDTO orderAddDTO){
        return JsonResult.failed(ResponseCode.NOT_ACCEPTABLE,"运行异常,服务降级,不能访问!");
    }

5.启动文件:

seata 文件: cmd 输入指定

seata-server.bat -h 127.0.0.1 -m file

     当中有一个注解方式:

@GlobalTransactional

       添加该注解,seata 就会价格这个方法当做一个分布式事务的起点 ,之后所有远程 Dubbo

调用数据库要么成功,要么都失败 !

 sentinel 文件:  点击

start-sentinel.bat


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值