![](https://img-blog.csdnimg.cn/20200808094206562.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
项目实战问题解析
记录微服务项目中的技术栈和问题处理方法
我是陈旭原
生命不息 运动不止
展开
-
RabbitMQ消息队列处理库存解锁及关闭订单问题
文章目录一、RabbitMQ延时队列消息的TTL死信二、实战延时关单规范设计三、消息队列处理库存解锁及关单1、流程分析2、库存微服务2.1 解锁库存配置2.2 解锁库存流程2.3 业务代码2.4 调试四、RMQ 延时队列处理关单及库存解锁整合1、流程分析2、订单关单3、订单释放和库存释放进行绑定五、消息丢失、重复、积压等解决方案1、消息丢失2、消息重复3、消息积压一、RabbitMQ延时队列RabbitMQ延时队列实现定时任务。场景:比如未付款订单,超过一定时间后,系统自动取消订单并释放占有的库存。原创 2020-10-17 15:40:17 · 3742 阅读 · 2 评论 -
本地事务与分布式事务
文章目录一、本地事务1、事务的基本性质2、事务的隔离级别3、spring事务的传播行为4、SpringBoot事务关键点4.1、事务的自动配置4.2、事务的坑一、本地事务1、事务的基本性质数据库事务的几个特性:原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(isolation)、持久性(Durability),简称就是 ACID。原子性:一系列的操作整体不可拆分,要么同时成功,要么同时失败。一致性:数据在事务的前后,业务整体一致。转账:A:1000; B:10原创 2020-10-17 11:51:26 · 1105 阅读 · 0 评论 -
消息队列RabbitMQ
文章目录一、RabbitMQ1、MQ简介1、简介2、RabbitMQ核心概念2、Docker安装RabbitMQ3、RabbitMQ消息发送测试1、fanout 模式2、Direct 模式3、Topic 模式二、Springboot 整合1、RMQ相关配置1、引入依赖2、启动类开启RMQ注解3、 配置文件增加RMQ属性2、RMQ使用1、单元测试3、RMQ队列监听1、监听消息2、RabbitListener三、可靠投递1、发送端确认2、消费端确认1、配置修改2、测试四、RabbitMQ 延时队列1、Rabbi原创 2020-10-11 12:17:29 · 343 阅读 · 1 评论 -
接口幂等性问题处理
文章目录一、接口幂等性概念1. 接口调用存在的问题2. 什么是接口幂等性3. 什么情况下需要保证接口的幂等性二、那些情况需要防止任意多次执行所产生的影响均与一次执行的影响相同,这是幂等性的核心特点。其实在我们编程中主要操作就是CURD,其中读取(Retrieve)操作和删除(Delete)操作是天然幂等的,受影响的就是创建(Create)、更新(Update)。一、接口幂等性概念1. 接口调用存在的问题现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系原创 2020-10-10 14:55:19 · 1156 阅读 · 1 评论 -
SpringSecurity 退出登录使JWT失效的解决方案
文章目录一、将Jwt Token存入Redis中二、实现JwtClaimsSetVerifier,验证Jwt Token是否有效三、实现JwtTokenStore的removeAccessToken方法,退出后使原令牌失效项目引入了JWT,在实现退出功能的时候,发现即使调用了相关接口废弃令牌,但是令牌仍然可以使用。查看原码才知道,使用的JwtTokenStore的removeAccessToken是个空方法。查了下资料,看到以下这段话。其实要完美地失效JWT是没办法做到的。“Actually, J原创 2020-09-27 11:44:11 · 6816 阅读 · 1 评论 -
异步与线程池及异步编排
文章目录一、异步1、初始化线程池的4中方式2、开启线程测试二、线程池1、开发中为什么使用线程池?2、线程池七大参数:3、工作顺序:4、面试:三、CompletableFuture异步编排1、创建异步对象2、计算完成时回调方法3、线程串行化方法4、两任务组合 - 都要完成5、多任务组合四、测试代码五、异步编排小案例1、顺序获取详情、2、异步编排获取详情1、线程池配置2、代码优化一、异步在业务开发中,有很多异步场景,为了节约时间或或者提高系统的吞吐量,要做一些异步任务,在Java中要实现异步通常都是Thre原创 2020-09-14 15:47:07 · 1343 阅读 · 2 评论 -
缓存及分布式锁
文章目录一、缓存1、缓存使用2、本地缓存与分布式缓存3、整合redis二、高并发下缓存失效的三个问题-穿透、雪崩、击穿1、缓存穿透2、缓存雪崩3、缓存击穿4、小结三、分布式锁原理及使用1、本地锁2、分布式锁演进四、分布式锁-Redisson1、Redisson简介和整合2、Redisson-lock锁测试3、Redisson读写锁4、项目实战五、SpringCache1、项目整合SpringCache一、缓存1、缓存使用为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而DB承担数据罗盘原创 2020-09-13 13:23:25 · 351 阅读 · 0 评论 -
压力测试和性能优化实践
文章目录一、压测概念二、性能指标三、压测软件JMeter Address Already in use错误解决四、堆内存与垃圾回收一、压测概念1、压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。2、使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:内存泄漏、并发与同步。3、有效的压力测试系统将应用以下这些关键条件:重复、并发、量级、随机变化。影响性能考虑点包括:原创 2020-09-08 16:56:33 · 500 阅读 · 0 评论 -
Nginx+Windows搭建域名访问环境
文章目录正向代理反向代理搭建域名访问环境Nginx配置文件反向代理配置Nginx请求网关正向代理作用:隐藏客户端信息例如:如果想访问谷歌,访问不上,可以搭建代理服务器,电脑配置代理服务器的地址,想访问某个地址,就由代理服务器帮我们访问反向代理作用:屏蔽内网服务器信息,负载均衡访问例如:想访问我们的系统,我们的系统每个服务器由内网部署,如果整个内网暴露出去,容易引起攻击,为了能找到整个内网服务器集群,在它们前面前置一个服务器(这样就是反向代理),而这个服务器可以使用Nginx。搭建域名访问环境原创 2020-10-11 12:22:17 · 2522 阅读 · 1 评论 -
Java重写equals方法
文章目录一、为什么equals()方法要重写?二、怎样重写equals()方法?1、自反性原则2、对称性原则3、传递性原则4、必须覆写hashCode方法这样结果就是三个false。一、为什么equals()方法要重写?判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象。这样我们往往需要重写equals()方法。我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存原创 2020-08-30 12:51:23 · 889 阅读 · 0 评论 -
获取SpringCloud gateway响应的response的并进行修改
文章目录一、需求说明:二、解决方案:三、代码实现一、需求说明:由于公司的项目接入了几个几个服务进来,因为这几个服务接口返回的结果对象没有统一,前端需要后端将返回结果对象统一。二、解决方案:在网关写一个全局过滤器去对接口返回结果对象进行重构然后返回给前端。三、代码实现package com.jzt.zyy.gateway.filter;import cn.hutool.core.util.StrUtil;import cn.hutool.json.JSONObject;import原创 2020-08-24 18:28:20 · 7163 阅读 · 1 评论 -
mybatis-plus实现逻辑删除
文章目录需求说明代码实现需求说明常规的删除为物理删除,比较暴力。使用逻辑删除的好处是可能以后要用得到某些删除的数据。 比如说 某个需求是订单编号要自增, 即使这个订单被删除了,也要从被删除的订单编号开始递增,这个时候逻辑删除就派上用场了。逻辑删除就是在数据库中,指定某个状态位字段,约定好删除和未删除的状态。例如1是未删除, 0 是删除 。关于mybatis-plus逻辑删除的官网: mybatis-plus逻辑删除代码实现官方文档介绍的使用方法如下。一共只有两步, 一个是在yml中配置,原创 2020-08-20 14:46:08 · 5834 阅读 · 1 评论 -
网站跨域问题理解及解决方案
文章目录一、跨域的概念二、options请求为什么发生两次请求options请求如何产生options请求options请求有什么作用三、跨域解决方案使用nginx部署为同一个域后端服务配置当次请求允许跨域网关配置跨域一、跨域的概念跨域: 指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。同源策略: 是指协议,域名,端口都要相同,其中有一个不同都会产生跨域。二、options请求自后天restful接口流行开来,从浏览器请求一个接原创 2020-08-20 09:50:57 · 988 阅读 · 0 评论 -
一个获取多级目录的小案例
文章目录1、需求2、代码实现1、需求获取京东商城首页的三级菜单数据2、代码实现使用springboot+mybatis实现1、controller @RequestMapping("/list/tree") @ApiOperation(value = "查询三级分类、组装为分类树",notes = "前端通过key==data获取") public R list(){ List<CategoryEntity> entities = categoryS原创 2020-08-19 09:21:50 · 261 阅读 · 0 评论 -
ElasticSearch详解文档
1. ELASTICSEARCH1、安装elastic searchdokcer中安装elastic search(1)下载ealastic search和kibanadocker pull elasticsearch:7.6.2docker pull kibana:7.6.2(2)配置mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/dataecho "http.host: 0.0.0.0" >原创 2020-08-08 10:15:15 · 1579 阅读 · 0 评论