导入pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 关闭缓存 thymeleaf: cache
传参数 vue中this.$router.push()路由传值 // 命名的路由 router.push({ name: 'user', params: { userId: 123 }}) // 带查询参数,变成/backend/order?selected=2 this.$router.push({path: '/backend/order', query: {selected: &qu
docker 安装sentinel docker run -d -p 8858:8858 \ --name sentinel-dashboard \ -e AUTH_USERNAME=sentinel \ -e AUTH_PASSWORD=sentinel \ -e NACOS_SERVER_ADDR=192.168.16.161:8848 \ bladex/sentinel-dashboard:
依赖 <!-- 配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> &
RabbitMQ Broker 异步调用好处: 吞吐量提升:无需等待订阅者处理完成,响应更快速 故障隔离:服务没有直接调用,不存在级联失败问题 调用间没有阻塞,不会造成无效的资源占用 耦合度极低,每个服务都可以灵活插拔,可替换 流量削峰:不管发布事件的流量波动多大,都由 Broker 接收,订阅者可以按照自己的速度去处理事件 异步调用缺点: 架构复杂了,业务没有明显的流程线,不好管理 需要依赖
RestTemplate pring 提供了一个 RestTemplate 工具,只需要把它创建出来即可。(即注入 Bean) @SpringBootApplication public class OrderApplication { public static void main(String[] args) { SpringApplication.run(Ord
1、部署一个tomcat(主节点部署)# kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8 kubectl get pods -o wide # 可以获取到Tomcat信息(Tomcat具体部署在哪个节点) 在node2节点部署了 如果降 node2 的Tomcat停掉,则主节点node3 会从 node1 拉起
一、基础环境搭建# 1、前置要求# 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘 30GB或更多 集群中所有机器之间网络互通 可以访问外网,需要拉取镜像 禁止swap分区 2、部署步骤# 1、在所有的节点上安装Docker和kubeadm 2、部署Kubernetes Master 3、部署容器网络插件 4、部署Kubern
一、k8s快速入门# 1、简介# kubernetes简称k8s。是用于自动部署,扩展和管理容器化应用程序的开源系统。 相关文档: 中文官网:https://kubernetes.io/Zh/ 中文社区:https://www.kubernetes.org.cn/ 官方文档:https://kubernetes.io/zh/docs/home/ 社区文档:https://docs.kubern
一、Sleuth概念 为什么需要Spring Cloud Sleuth# 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与
一、什么是Sentinel? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 的主要特性: 二、整合Sentinel# Spring Cloud Alibaba整合Sentinel文档:https://github.com/alibaba/spring-cloud-alib
// 如果当前这个场次的商品库存信息已经上架就不需要上架 // 5、使用库存作为分布式Redisson信号量(限流) // 使用库存作为分布式信号量 RSemaphore semaphore = redissonClient.getSemaphore(SKU_STOCK_SEMAPHORE + token); // 商品可以秒杀的数量作为信号量 semaphore.trySetPermits(
高并发场景的分布式事务,我们采用柔性事务+可靠消息+最终一致性方案(异步确保型),可靠性是最重要的,那么如何保证消息的可靠性呢? 一、消息丢失 1、消息发送出去,由于网络问题没有抵达服务器 做好容错方法(try-catch),发送消息可能会网络失败,失败后要有容错机制,可记录到数据库,采用定期扫描重发的方式。 做好日志记录,每个消息状态是否都被服务器收到都应该记录 做好定期重发,如果消息没有发
添加RMQ配置 <!-- 使用高级消息队列来解决分布式事务一致性 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId>
分布式事务-最终一致性库存解锁逻辑 一、Seata的不足 Seata的AT模式是二阶段提交协议(2PC),第一阶段将本地事务直接提交,第二阶段想要回滚的时候,是通过回滚日志(日志表)做的反向补偿,数据库原来是多少又改了回来。 Seata应用场景:后台管理系统,比如添加商品,优惠、库存、积分、会员要成功都成功,要失败都失败,对于并发性能不高的可以使用Seata来处理分布式事务。 如果并发性能要求很高
一、为什么会有分布式事务# 分布式系统经常出现的异常,如机器宕机、网络异常、消息丢失、数据错误、不可靠的TCP、存储数据丢失等等。 二、分布式事务 分布式事务是指事务的参与者,支持事务的服务器,资源服务器分别位于分布式系统的不同节点之上,通常一个分布式事物中会涉及到对多个数据源或业务系统的操作。 典型的分布式事务场景:跨银行转操作就涉及调用两个异地银行服务 三、分布式理论 1、CAP理论 CAP理
一、本地事务 1、事务的基本性质 数据库事务的几个特性:原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(isolation)、持久性(Durability),简称就是 ACID。 原子性:一系列的操作整体不可拆分,要么同时成功,要么同时失败。 一致性:数据在事务的前后,业务整体一致。 转账:A:1000; B:1000; 转 200 事务成功; A:800; B
任意多次执行所产生的影响均与一次执行的影响相同,这是幂等性的核心特点。其实在我们编程中主要操作就是CURD,其中读取(Retrieve)操作和删除(Delete)操作是天然幂等的,受影响的就是创建(Create)、更新(Update) 一、接口幂等性概念 接口调用存在的问题# 现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个
异步执行 远程查询库存 @FeignClient("gulimall-ware") public interface WmFeignService { //查询是否有库存 @PostMapping("ware/waresku/hasstock")//ware/waresku public R getSkusHassStock(@R
异步执行 调度服务 多线程 addToCart @Autowired StringRedisTemplate redisTemplate; @Autowired ProductFeignService productFeignService; @Autowired ThreadPoolExecutor executor; private final String CART_PREFIX = &
ThreadLocal - 同一个线程共享数据 使用redis 保存 购物车数据 引入redis 和Redis Seccsion 编辑拦截器 public class CartInterceptor implements HandlerInterceptor {}} public static ThreadLocal<UserInfoTo> toThreadLocal = new
购物车 Vo设计 需要计算属性 用户可以在登录状态下将商品添加到购物车【用户购物车/在线购物车】 用户可以在未登录状态下将商品添加到购物车【游客购物车/高线购物车/临时购物车】 购物车服务搭建 server.port=2009 spring.application.name=gulimall-cart spring.cloud.nacos.server-addr=127.0.0.1:884
Session 共享 https://docs.spring.io/spring-session/docs/2.3.1.RELEASE/reference/html5/guides/boot-redis.html 配置 第一步 <dependency> <groupId>org.springframework.session</group
单点登陆社交登陆 OAuth2.0 OAuth2.0 使用微博社交登陆 https://open.weibo.com/connect 开发手册 https://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E 更换 YOUR_CLIENT_ID App Key:1514335119 更
将所有的异步线程池任务交给线程池,可控制 性能稳定 线程池创建 int corePoolSize, 核心线程一直存在 除非 allowCoreThreadTimeOut int maximumPoolSize, 最大线程池数量 long keepAliveTime,存活时间 TimeUnit unit,时间单位 BlockingQueue<Runnable> workQueue,堵塞
1.写一个接口 并FeignClient 调用哪个 import org.springframework.cloud.openfeign.FeignClient; @FeignClient("gulimall-coupon")//声明调用哪个 开启feign调用 public interface CouponFeignServicce { } 2.在Application注解
Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。 Predicate(谓语、断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:Path、Query、Method、Header等。 Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应
异步编排 @Configuration public class MyThreadConfig { @Bean public ThreadPoolExecutor threadPoolExecutor(ThreadPoolConfigProperties pool) { return new ThreadPoolExecutor( p
第三方缓存整合 ehcache.xml <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号