你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客
这是我的 github https://github.com/Qiuner ⭐️
gitee https://gitee.com/Qiuner 🌹
如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^)
想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎
代码都在github或gitee上,可以去上面自行下载
如果你遇到了问题,自己没法解决,去我掘金评论区问。私信看不完,CSDN评论区可能会漏看 掘金账号 https://juejin.cn/user/1942157160101860 掘金账号
- 这篇有不少bug记录与方便您复制的代码,相信一定能节省学习时间同时达到更好的效果
- 本博客要与原文档搭配使用 day05 - 飞书云文档 (feishu.cn)
- 介绍了使用Sentinel进行请求限流、线程隔离、服务熔断等操作和分布式事务一致性处理方案 seata
背景色是愧花黄绿- 解决了多个经常出现的bug,对于余下的作业 笔墨不多 本章作业算是比较简单的
- 这一章,官方文档弄得很详细了,因此我没有很多可以拓展的地方
java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
spring: cloud: sentinel: transport: dashboard: localhost:8090 # sentinel的控制台 http-method-specify: true # 是否 设置请求方式作为资源名称
Fallback
(回退机制)是一种应对服务故障的策略。当某个服务不可用或调用失败时,可以通过回退机制提供一个默认的响应或执行替代逻辑,以避免整个系统的崩溃并提升系统的容错能力。像异常,当请求失败了,不报错,给另外设定好的处理逻辑docker load -i /root/seata-1.5.2.tar
docker run --name seata \ -p 8099:8099 \ -p 7099:7099 \ -e SEATA_IP=192.168.200.128 \ -v /root/seata:/seata-server/resources \ --privileged=true \ --network Qiuner-net \ -d \ seataio/seata-server:1.5.2
docker run --name seata \ -p 8099:8099 \ -p 7099:7099 \ -e SEATA_IP=192.168.150.101 \ -v /root/seata:/seata-server/resources \ --privileged=true \ --network Qiuner-net \ -d \ seataio/seata-server:1.5.2
docker network connect Qiuner-net seata
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config org.springframework.cloud spring-cloud-starter-bootstrap com.alibaba.cloud spring-cloud-starter-alibaba-seata
seata: registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址 type: nacos # 注册中心类型 nacos nacos: server-addr: 192.168.200.128:8848 # nacos地址 namespace: "" # namespace,默认为空 group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUP application: seata-server # seata服务名称 username: nacos password: nacos tx-service-group: hmall # 事务组名称 service: vgroup-mapping: # 事务组与tc集群的映射关系 hmall: "default"
spring: application: name: item-service # 服务名称 profiles: active: dev cloud: nacos: server-addr: 192.168.200.128:8848 # nacos地址 config: file-extension: yaml # 文件后缀名 shared-configs: # 共享配置 - dataId: shared-jdbc.yaml # 共享mybatis配置 - dataId: shared-log.yaml # 共享日志配置 - dataId: shared-swagger.yaml # 共享日志配置 - dataId: shared-seata.yaml # 共享seata配置
server: port: 8081 feign: okhttp: enabled: true # 开启OKHttp连接池支持 sentinel: enabled: true # 开启Feign对Sentinel的整合 hm: swagger: title: "商品服务接口文档" package: com.hmall.item.controller db: database: hm-item
--add-opens java.base/java.lang.invoke=ALL-UNNAMED
首先明白题目要让我们做什么?
编写降级逻辑,就是写sentinel中的fallback
明白了要做什么之后,来想怎么做:fallback是Sentinel中的一个东西,因此想要编写fallback,就得想将Sentinel引入进来,在Sentinel中的控制台能够看到要编写fallback逻辑的模块
java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
一开始你可能看不到你之前配置的东西
添加依赖
com.alibaba.cloud spring-cloud-starter-alibaba-sentinel
添加配置
package com.hmall.api.client.fallback; import com.hmall.api.client.CartClient; import com.hmall.common.exception.BizIllegalException; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; import java.util.Collection; @Slf4j public class CartClientFallback implements FallbackFactory { @Override public CartClient create(Throwable cause) { return new CartClient(){ @Override public void deleteCartItemByIds(Collection ids) { log.error("远程调用CartClientt#deleteCartItemByIds方法出现异常,参数:{}", ids, cause); // 批量删除失败,进行事务回滚111 throw new BizIllegalException(cause); } }; } }
作业描述
除了下单业务以外,用户如果选择余额支付,前端会将请求发送到pay-service模块。而这个模块要做三件事情:
- 直接从user-service模块调用接口,扣除余额付款
- 更新本地(pay-service)交易流水表状态
- 通知交易服务(trade-service)更新其中的业务订单状态
更多专栏订阅:感谢宝子的订阅
📊 一图读懂系列
📝 一文读懂系列
⚽ Uniapp
🌟 持续更新
🤩 Vue项目实战
🚀 JavaWeb
🎨 设计模式
📡 计算机网络
🎯 人生经验
🔍 软件测试