当前位置: 首页 > news >正文

黑马商城(五)微服务保护和分布式事务

一、雪崩问题

二、雪崩-解决方案(服务保护方案)

请求限流:

线程隔离:

服务熔断:

服务保护组件:

三、Sentinel

引入依赖:

<!--sentinel-->
<dependency><groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
server:port: 8082
feign:okhttp:enabled: true #配置连接池开关swagger:title: "黑马商城购物车服务接口文档"package: "com.hmall.cart.controller"description: "购物车服务接口"
spring:cloud:sentinel:transport:dashboard: localhost:8090 #sentinel控制台地址

簇点链路:

Endpoint==Controller里的各种路径 

请求限流:

QPS:每秒钟请求的数量

线程隔离:

fallback: 

案例-给FeignClient添加Fallback逻辑:

package com.hmall.api.fallback;import com.hmall.api.client.ItemClient;
import com.hmall.api.dto.ItemDTO;
import com.hmall.api.dto.OrderDetailDTO;
import com.hmall.common.utils.CollUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;import java.util.Collection;
import java.util.List;@Slf4j
public class ItemClientFallbackFactory implements FallbackFactory<ItemClient> {@Overridepublic ItemClient create(Throwable cause) {return new ItemClient() {@Overridepublic List<ItemDTO> queryItemByIds(Collection<Long> ids) {log.error("查询商品失败!",cause);//查询不到返回一个空集合return CollUtils.emptyList();}@Overridepublic void deductStock(List<OrderDetailDTO> items) {log.error("扣减商品库存失败!",cause);throw new RuntimeException(cause);}};}
}
package com.hmall.api.config;import com.hmall.api.fallback.ItemClientFallbackFactory;
import com.hmall.common.utils.UserContext;
import feign.Logger;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Bean;public class DefaultFeignConfig { //配置类中声明bean对象@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}@Beanpublic RequestInterceptor userInfoRequestInterceptor(){return new RequestInterceptor() {@Overridepublic void apply(RequestTemplate requestTemplate) {Long userId = UserContext.getUser();if(userId!=null) {requestTemplate.header("user-info", userId.toString());}}};}@Beanpublic ItemClientFallbackFactory itemClientFallbackFactory(){return new ItemClientFallbackFactory();}
}

 服务熔断:

断路器:

四、分布式事务 

Seata:

Seata架构:

部署TC服务:

docker run --name seata \
-p 8099:8099 \
-p 7099:7099 \
-e SEATA_IP=192.168.50.129 \    #自己的IP地址
-v ./seata:/seata-server/resources \
--privileged=true \
--network hmall \    #确保和nacos mysql在一个网络下
-d \
seataio/seata-server:1.5.2

微服务继承Seata:

通过nacos共享配置:

seata:registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址type: nacos # 注册中心类型 nacosnacos:server-addr: 192.168.50.129:8848 # nacos地址namespace: "" # namespace,默认为空group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUPapplication: seata-server # seata服务名称username: nacospassword: nacostx-service-group: hmall # 事务组名称service:vgroup-mapping: # 事务组与tc集群的映射关系hmall: "default"

XA模式: 

实现XA模式:

整个事务中其他微服务端的事务因为后续也需要实现事务管理,都需要在对应方法上加上@Transactional

AT模式:

实现AT模式:

AT与XA区别:

追求一致性选XA

追求性能选AT

相关文章:

  • PHP异常处理__RuntimeException运行时错误
  • ZLMediaKit流媒体服务器
  • c++:线程(std::thread)
  • PHP中的ReflectionClass讲解【详细版】
  • GPT-SoVITS 使用指南
  • Linux网络服务之防火墙
  • Datawhale AI春训营 世界科学智能大赛--合成生物赛道:蛋白质固有无序区域预测 小白经验总结
  • (附邀请码)探秘扣子空间:排盘优美,魅力无限
  • C#学习第17天:序列化和反序列化
  • 数据结构0基础学习堆
  • PHP获取大文件行数
  • 实现Azure Function安全地请求企业内部API返回数据
  • springAi---智能客服
  • Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块
  • 机器学习误差图绘
  • SEO长尾关键词优化实战
  • JAVAEE(网络原理—UDP报头结构)
  • 一个 CTO 的深度思考
  • Vue+Notification 自定义消息通知组件 支持数据分页 实时更新
  • pycharm中怎么解决系统cuda版本高于pytorch可以支持的版本的问题?
  • 中国围棋协会将不组队参加今年的LG杯世界棋王赛
  • 拍北京地铁上的读书人第七年:数字风吹散读书人了吗?
  • 税率飙至3500%!美国双反大棒重击东南亚光伏,中企如何应对
  • 三博脑科跌超10%:董事长遭留置立案,称控制权未变化,经营秩序正常
  • 中印尼举行外长防长“2+2”对话机制首次部长级会议
  • 对话地铁读书人|来自法学副教授的科普:读书日也是版权日