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