电商项目
文章平均质量分 97
福建选手阿俊
在无人问津的地方训练,在万众瞩目的地方出现
展开
-
电商项目——分布式事务——第十三章——中篇
文章目录1:本地事务在分布式下的问题2:本地事务隔离级别&传播行为等复习3:分布式CAP&Raft原理4:BASE5:分布式事务常见解决方案6:Seata&环境准备7:Seata分布式事务体验8:最终一致性库存解锁逻辑1:本地事务在分布式下的问题 @Transactional @Override public SubmitOrderResponseVo submitOrder(OrderSubmitVo vo) { confirmVoThrea原创 2020-11-25 15:00:25 · 520 阅读 · 0 评论 -
电商项目——订单服务——第十二章——中篇
文章目录1:订单基本概念2:订单登录拦截3:订单确认页模型抽取4:订单确认页数据获取5:Feign远程调用丢失请求头问题和Feign异步调用丢失请求头问题6:bug修改7:订单确认页渲染8:订单确认页库存查询9:订单确认页模拟运费效果10:订单确认页细节显示11:接口幂等性讨论12:订单确认页完成13:原子验令牌14:构造订单数据15:构造订单项数据16:订单验价17:保存订单数据18:锁定库存19:提交订单的问题1:订单基本概念2:订单登录拦截mall-orderOrderInter原创 2020-11-24 14:35:51 · 838 阅读 · 0 评论 -
接口幂等性介绍
文章目录1:什么是幂等性?2: 哪些情况需要防止?3: 什么情况下需要幂等?4:幂等解决方案比如我们遇到了一个提交订单的例子假设模拟网速很慢,它点击了多次提交订单,我们数据库的订单被插入了多份,订单的防止重复提交是非常重要的(无论是表单之间的提交,还是微服务之间的相互调用,都可能出现多次提交)专业术语就是要保证提交订单的幂等性(提交一次和提交一百次结果都是一样的),接下来我们就来讨论一下接口幂等性问题1:什么是幂等性?2: 哪些情况需要防止?3: 什么情况下需要幂等?4:幂等解决方案原创 2020-11-23 00:42:29 · 199 阅读 · 0 评论 -
电商项目——消息队列——第十一章——中篇
文章目录1:RabbitMQ简介2:RabbitMQ工作流程3:RabbitMQ安装4:Exchange类型5:Direct-Exchange6:Fanout-Exchange7:Topic-Exchange8:SpringBoot整合RabbitMQ9:AmqpAdmin使用10:RabbitTemplate使用11:RabbitListener&RabbitHandler接受消息12:可靠投递-发送端确认13:可靠投递-消费端确认1:RabbitMQ简介概述我们来讲一下队列和主题中的原创 2020-11-20 20:20:27 · 634 阅读 · 2 评论 -
电商项目——购物车——第十章——中篇
文章目录1:环境搭建2:数据模型分析3:VO编写4:ThreadLocal用户身份鉴别5:页面环境搭建6:添加购物车7:添加购物车细节8:RedirectAttribute9:获取&合并购物车10:选中购物项11:改变购物项数量12:删除购物项1:环境搭建我们先来搭建好购物车的环境第一步:创建一个购物车微服务,并且配置好域名,映射到我们的linux虚拟机,并编写好配置文件spring: application: name: mall-cart cloud: naco原创 2020-11-17 00:30:23 · 642 阅读 · 1 评论 -
电商项目——认证服务——第九章——中篇
文章目录1:环境搭建2:好玩的验证码服务倒计时3:整合短信验证码4:验证码防刷校验5:一步一坑的注册页环境6:异常机制7:MD5&盐值&BCrypt8:注册完成9:账号密码登录10:OAuth2.0简介11: weibo登录测试12:社交登录回调13:社交登录完成14:社交登录测试成功15:分布式session不共享不同步问题16:分布式session解决方案原理17:SpringSession整合18:自定义SpringSession完成子域session共享19:SpringSessio原创 2020-11-15 10:48:44 · 605 阅读 · 2 评论 -
电商项目——商城业务-检索服务——第六章——中篇
文章目录1:搭建页面环境2:调整页面跳转3:检索查询参数模型分析抽取4:检索返回结果模型分析抽取5:检索DSL测试-查询部分6:检索DSL测试-聚合部分7:SearchRequest构建-检索8:SearchRequest构建-排序,分页,高亮&测试9:SearchRequest构建-聚合10:SearchResponse分析&封装11:验证结果封装正确性12:页面基本数据渲染13:页面筛选条件渲染14:页面分页数据渲染15:页面排序功能16:页面排序字段回显17:页面价格区间搜索18:面包原创 2020-11-15 10:36:47 · 1552 阅读 · 2 评论 -
分布式session解决方案原理
我们先来解决session不同步问题第一种方案第二种方案第三种方案第四种方案我们最终使用第四种方案来解决session不同步问题;前提:浏览器无论负载均衡到哪一个服务器,都会携带上一次访问的数据(也就是同域名情况下),如果是在不同域名的情况下,我们又要怎么解决????这就是子域问题如上的操作非常麻烦,我们以后可以使用SpringSession来统一解决我们可以使用SpringSession来解决session在分布式情况下带来的问题:session共享问题解决;不同服务,子域ses原创 2020-11-14 15:53:08 · 177 阅读 · 2 评论 -
自己动手整合阿里云的短信验证码
我们来调通一下发送验证码到手机,这就是一个第三方服务mall-third-party(短信服务)阿里云上面有免费使用的发送短信验证码如下,开通即可https://free.aliyun.com/product/cloudcommunication-free-trial?spm=5176.12901015.0.i12901015.729e525colmSdi开通完出现如下页面在阿里云控制台中注意一点:我们前端点击发送验证码,不可以直接到第三方服务(短信服务)里面,必须先通过我们的微服务,在让微服务发原创 2020-11-12 00:28:47 · 475 阅读 · 2 评论 -
电商项目——商品详情——第八章——中篇
文章目录1:环境搭建2:模型抽取3:规格参数4:销售属性组合5:详情页渲染6:销售属性渲染7:sku组合切换8:异步编排优化1:环境搭建前面我们复习了异步和线程池里的内容2:模型抽取3:规格参数4:销售属性组合5:详情页渲染6:销售属性渲染7:sku组合切换8:异步编排优化...原创 2020-11-11 00:25:00 · 883 阅读 · 4 评论 -
java.lang.IncompatibleClassChangeError: Found interface org.elasticsearch.common.bytes.BytesReferenc
我在官网上引入es的依赖(注意这个依赖,必须要和你安装的ES的版本一致)到mall-search中 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version&g原创 2020-11-07 10:36:30 · 2196 阅读 · 3 评论 -
电商项目——商城业务-异步——第七章——中篇
文章目录1:异步复习2:线程池详解3:CompletableFuture3.1 启动异步任务3.2 完成回调与异常感知3.3 handle最终处理3.4 线程串行化3.5 两任务组合-都要完成3.6 两任务组合-一个完成3.6 两任务组合-多任务组合1:异步复习异步复习2:线程池详解线程池详解3:CompletableFuture在分布式架构中,我们还有一个需要解决的复杂任务场景,比如A,B,C三个异步任务进行运行,C必须等待A运行完的返回结果后才可以运行,B又不用等A,C我们可以直接异步运行原创 2020-11-06 22:14:43 · 520 阅读 · 2 评论 -
项目开发中为什么需要使用线程池???
文章目录1:异步2:线程池介绍2.1 创建线程池的两大方法:2.2 线程池的运行流程2.3 开发中为什么要使用线程池项目开发中为什么需要使用线程池???我们先从开启线程的几种方式进行比较,然后得出为什么需要使用线程池来进行开发??最后对线程池做一个简单的介绍1:异步在我们后来的开发中有很多异步场景,为了提高系统的吞吐量和运行时间,我们要做一些异步任务;异步我们都是使用Java里面的Thread开启线程的任务方式异步和同步区别:同步和异步的概念对于很多人来说是一个模糊的概念,是一种似乎只能意会不能原创 2020-11-06 14:22:14 · 943 阅读 · 1 评论 -
电商项目——缓存——第五章——中篇
文章目录1:缓存使用1.1 本地缓存与分布式缓存1.2 整合redis测试1.3 改造三级分类业务1.4 压力测试出现的内存泄露及解决1.5 缓存击穿,穿透,雪崩1.6 加锁解决缓存击穿问题1.7 本地锁在分布式下的问题2:分布式锁2.1 分布式锁原理与使用2.2 Redisson简介&整合2.3 Redisson-lock锁测试2.4 Redisson-lock看门狗原理-redisson如何解决死锁2.5 Redisson-读写锁测试2.6 Redisson-读写锁补充2.7 Redisson原创 2020-11-04 16:39:35 · 883 阅读 · 2 评论 -
SpringCache——自定义缓存配置——如何将自定义的数据保存为json格式
我们接下来就自定义将数据保存为json格式我们先来看源码CacheAutoConfiguration里面的@EnableConfigurationProperties(CacheProperties.class)(将所有的属性都绑定到这里面),我们的CacheAutoConfiguration源码还有如下的配置可以导入CacheConfigurations缓存的自动配置类/** * {@link ImportSelector} to add {@link CacheType} configurati原创 2020-11-04 15:07:34 · 1050 阅读 · 3 评论 -
缓存一致性解决
根据上一章的学习,我们现在就可以用Redisson框架来解决分布式锁的问题,进行修改获取三级二级分类代码如下 //todo 产生堆外内存溢出异常:OutOfDirectMemoryEror @Override public Map<String, List<Catelog2Vo>> getCatalogJson() { String catalogJSON = stringRedisTemplate.opsForValue().get("cat原创 2020-11-04 03:14:32 · 196 阅读 · 4 评论 -
分布式锁的原理与使用——五种进阶方式
文章目录1:分布式锁演进-阶段一2:分布式锁演进-阶段二3:分布式锁演进-阶段三4:分布式锁演进-阶段四5:分布式锁演进-阶段五-最终形态为了锁住所有的东西我们就要使用分布式锁,前面我们已经讲过了使用本地锁不可以再分布式下正确加锁的情况,原因是本地锁只可以锁住当前进程,在分布式情况下,有很多服务,每一个锁只可以锁自己的服务,我们必须让所有的服务,只可以有一个锁进来,这种情况我们必须要使用分布式锁来解决分布式下的缓存问题。我们分布式锁该如何使用呢?我们先来讨论一种简单的原理,如下图我们现在有这么多的商原创 2020-11-02 23:28:51 · 403 阅读 · 2 评论 -
缓存击穿,穿透,雪崩
在我们高并发系统下,就这么一个简单的缓存逻辑它暗藏了很多玄机,如下categoryServiceImpl @Override public Map<String, List<Catelog2Vo>> getCatalogJson() { //给缓存中放入json字符串,拿出json字符串,还要逆转为可用的对象类型【序列化,反序列化】 /** * 由于网络传输,我们相当于给内存创建了一个对象catalogJsonFromDb原创 2020-11-01 23:32:20 · 186 阅读 · 1 评论 -
本地缓存与分布式缓存介绍
1:本地缓存与分布式缓存性能提升大神器:缓存,我们合理利用缓存就可以对系统性能有一个大提升,当然使用缓存也会有很多的问题,我们就一起提升解决通过以前的性能优化,我们可以优化它的业务逻辑来增加它的吞吐量,但在更多的时候,对于一些复杂的业务,我们已经不可以通过优化它的业务逻辑来增加吞吐量了,比如一些复杂的查询功能,每次查询就会很麻烦,我们就需要使用缓存。第一次查询的时候就把它放入缓存里面,以后我们需要数据就直接从缓存里面获取,没必要进行复杂的查询,检索。最基本的缓存就是map(本地缓存)原创 2020-11-01 01:52:29 · 527 阅读 · 1 评论 -
电商项目——性能压测——第四章——中篇
文章目录1:压力测试1.1 基本介绍1.2 Apache JMeter安装使用1.3 JMeter在windows下地址占用bug解决2:性能监控2.1 堆内存与垃圾回收2.2 jvisualvm使用3:优化3.1 中间控件对性能的影响3.2 简单优化吞吐量测试3.3 nginx动静分离3.4 模拟线上应用内存崩溃宕机情况3.5 优化三级分类数据获取1:压力测试1.1 基本介绍在分布式开发中,我们都将微服务拆分成一个个独立的模块,每一个微服务模块在上线之前,或者之后,都要对他进行压力测试。压力测试就是原创 2020-10-31 23:24:20 · 991 阅读 · 0 评论 -
电商项目——商城业务-首页——第三章——中篇
文章目录1:整合thymeleaf渲染页2:整合dev-tools渲染一级分类数据3:渲染二级三级分类数据4:nginx-搭建域名访问环境一(反向代理配置)5:nginx-搭建域名访问环境二(负载均衡到网关)1:整合thymeleaf渲染页前面我们编写了商品上架功能,让我们可以在后台点击商品上架按钮进行上架接下来我们开发整个商城的前端界面,包括首页内容,检索内容,购物车,订单等在mall-product中调通前后端不分离的效果。第一步:导入thymeleaf <dependency&g原创 2020-10-31 12:30:58 · 1323 阅读 · 12 评论 -
nginx-搭建域名访问环境
文章目录1:反向代理配置2:负载均衡到网关按照正常流程如果项目上线的话我们必须要买一台服务器,我们就会有一个公网ip地址,这样的花别人都可以访问到ip地址,为这个地址绑定上域名,备案等操作,这样别人访问域名就可以访问到我们ip地址,但这样太麻烦了,我们开发环境中只要做基本环境,1:反向代理配置正向代理:请求发给我们的代理服务器,在转给我们整个网络互联网,所以互联网上看到的所有ip地址都是来源于正向代理服务器的ip地址反向代理在集群开发的时候非常需要,比如任何人去访问京东,京东有后台服务原创 2020-10-31 12:30:17 · 349 阅读 · 0 评论 -
电商项目——商城业务-商品上架——第二章——中篇
文章目录1:sku在es中的存储模型分析2:nested数据类型场景3:构造基本数据4:构造sku检索属性5:远程查询库存&泛型接口封装6:远程上架接口7:上架接口调试&feign源码8:抽取响应结果&上架测试完成1:sku在es中的存储模型分析es作为全文检索引擎,1.它承担项目里的所有全文检索功能,2.也会承担日志里面的全文检索信息功能(项目里面有些日志我们要进行快速定位,日志也有检索需求,我们把它传输到ES里面(有一个技术栈叫ELK,,LogStash负责收集日志,把收集来原创 2020-10-28 23:21:32 · 816 阅读 · 0 评论 -
电商项目——全文检索-ElasticSearch——第一章——中篇
文章目录1:简介2:Docker安装ES-存储和检索数据3:Docker安装Kibana-可视化检索数据4:入门-_cat5:入门-put&post新增数据6:入门-get查询数据&乐观锁字段7:入门-put&post修改数据8:入门-删除数据&bulk批量操作导入样本测试数据9:进阶-两种查询方式10:进阶-QueryDSL基本使用&match_all11:进阶-match全文检索12:进阶-match_phrase短语匹配13:进阶-multi_match多字段匹原创 2020-10-28 00:14:05 · 1017 阅读 · 0 评论 -
如何直接在Vagrantfile文件中扩大磁盘根目录?
大家认真阅读,如下的github就可以找出答案vagrant-disksize原创 2020-10-22 01:22:51 · 400 阅读 · 0 评论 -
Vagrantfile文件介绍
文章目录1:Vagrantfile2:装载命令和合并(Load Order and Merging)3:查找路径(Lookup Path)4:配置版本(Configuration Version)1:VagrantfileVagrantfile的主要功能是描述项目所需的机器类型,以及如何配置和提供这些机器。Vagrantfiles之所以称为Vagrantfiles,是因为该文件的实际文本文件名是Vagrantfile(除非您的文件系统在严格区分大小写的模式下运行,否则大小写并不重要)。Vagrant意原创 2020-10-22 00:20:55 · 379 阅读 · 0 评论 -
电商项目——商品服务-API-仓库管理——第十六章——上篇
文章目录1:整合ware服务&创建采购需求2:查询库存&创建采购需求3:合并采购需求4:领取采购单5:完成采购6:商品管理-SPU规格维护1:整合ware服务&创建采购需求WareInfoController@RestController@RequestMapping("ware/wareinfo")public class WareInfoController { @Autowired private WareInfoService wareInfoSe原创 2020-10-20 08:57:18 · 565 阅读 · 0 评论 -
电商项目——商品服务-API-商品管理——第十五章——上篇
文章目录1:SPU检索2:SKU检索1:SPU检索SpuInfoController@RestController@RequestMapping("product/spuinfo")public class SpuInfoController { @Autowired private SpuInfoService spuInfoService; /** * 列表 */ @RequestMapping("/list") //@Requi原创 2020-10-19 22:03:24 · 414 阅读 · 0 评论 -
电商项目——商品服务-API-新增商品——第十四章——上篇
文章目录1:调试会员等级相关接口2:获取分类关联的品牌3:获取分类下所有分组以及属性4:商品新增vo抽取5:商品新增业务流程分析6:保存SPU基本信息7:保存SKU基本信息8:调用远程服务保存优惠等信息9:商品保存debug完成10:商品保存及其它问题处理1:调试会员等级相关接口我们后来发布的所有商品都是通过下面的形式发布的我们先完善商品维护下的发布商品的所有接口mall-memberhttp://localhost:10000/member/memberlevel/list{"m原创 2020-10-19 20:30:16 · 822 阅读 · 4 评论 -
电商项目——商品服务-API-平台属性——第十三章——上篇
文章目录1:规格参数新增与VO2:规格参数列表3:规格修改4:销售属性维护5 :查询分组关联属性&删除关联6:查询分组未关联的属性7:新增分组与属性关联1:规格参数新增与VOAttrGroupController .java@RestController@RequestMapping("product/attrgroup")public class AttrGroupController { @Autowired private AttrGroupService att原创 2020-10-18 14:50:02 · 475 阅读 · 2 评论 -
Object划分
文章目录1:Po(persistant object)持久对象2:DO (Domain Object)领域对象3:TO(Transfer Object),数据传输对象4:DTO (Data Transfer Object)数据传输对象5:Vo(value object)值对象6:BO(business object)业务对象7:POJO(plain ordinary java object)简单无规则java对象8:DAO(data access object)数据访问对象1:Po(persistant原创 2020-10-16 19:38:47 · 283 阅读 · 3 评论 -
电商项目——商品服务-API-品牌管理&品牌分类关联与级联更新——第十二章——上篇
文章目录1:品牌分类关联与级联更新1:品牌分类关联与级联更新前面我们编写了平台属性中的属性分组,接下来我们对商品系统中的各个接口实现联调查询是逆向工程搭建的,我们要使用自己的查询功能;分页统计数据是错的,我们要引入分页插件引入分页插件编写模糊查询功能接下来我们编写关联查询功能(使用完整的代码)在我们电商系统中每一个品牌都要有它所属的分类,华为,小米等都是手机分类下的品牌;但是一个品牌不止只关联一个分类,他会关联很多分类;比如小米造了手机关联手机分类,又造电视关联电视分类等;一个原创 2020-10-16 02:08:39 · 688 阅读 · 1 评论 -
电商项目——商品服务-API-属性分组——第十一章——上篇
文章目录1:1:原创 2020-10-15 23:36:47 · 953 阅读 · 2 评论 -
电商项目——商品服务-API-品牌管理——第十章——上篇
文章目录1:1:原创 2020-10-14 16:06:51 · 656 阅读 · 2 评论 -
JSR303自定义校验注解
文章目录1:JSR303自定义校验注解1.1 第一步:编写一个自定义的校验注解@ListValue(我们可以参考一些已经实现的注解如@interface NotNull)1.2 第二步:编写一个自定义的校验器1.3 第三步:关联自定义的校验器和自定义的校验注解1:JSR303自定义校验注解问题:如果我们校验如下的方式是可以用正则表达式,可是有时候我们的业务只有正则也完成不了,所以我们需要自定义校验注解 /** * 显示状态[0-不显示;1-显示] */ @ListValue(vals={原创 2020-10-14 16:06:02 · 609 阅读 · 1 评论 -
电商项目——商品服务-API-三级分类——第九章——上篇
文章目录1:查询-递归树形结构获取数据2:配置网关路由与路径重写3:网关统一配置跨域4:查询-树形展示三级分类数据5:删除-页面效果6:删除-逻辑删除7:删除-删除效果细化讲完了前面几章的内容,现在我们就可以对后台管理系统,和微服务项目进行开发了,我们先从三级分类说起默认mall-product的环境已经全部配置好了1:查询-递归树形结构获取数据三级分类(电商里面经常用到的功能):所有的数据都是来源于数据库,我们要对三级分类进行维护,进行增删改查,我们首先就必须要后台管理系统来可以维护我们的整个数原创 2020-10-12 22:45:58 · 1894 阅读 · 3 评论 -
使用人人开源管理后台系统来体会前后端分离技术
文章目录我做的是一个关于三级分类数据的增删改查的模块,我得到了如下的结论我们对三级分类的增删改查效果以及基本完成,通过编写三级分类的增删改查,我们已经体会到了前后端交互的过程我们前端负责组装,收集好各种数据,把真正的增删改查执行的内容,通过url发送给后台,后台将前端发送过来的数据转化成自己想要的数据以后,在调用service来处理真正的功能我们看下面关于添加三级分类数据的一个演示前端:后端: /** * 保存 * * * @Request原创 2020-10-12 22:44:00 · 413 阅读 · 0 评论 -
电商项目——如何查出所有三级分类,并以树形结构组装起来?
文章目录1:查出所有三级分类,并以树形结构组装起来1.1 思路分析1.2 完整的代码演示1:查出所有三级分类,并以树形结构组装起来三级分类(电商里面经常用到的功能):所有的数据都是来源于数据库,我们要对三级分类进行维护,进行增删改查,我们首先就必须要后台管理系统来可以维护我们的整个数据。所以我们引出了下面的问题,解决了下面问题,我们就可以在搭建前端界面进行前后端连接问题:如何查出所有三级分类以及子分类,并以树形结构组装起来?,我们看下面的思路分析1.1 思路分析思路:首先我们要明确一点使用j原创 2020-10-10 13:58:46 · 3880 阅读 · 3 评论 -
电商项目——前端基础——第八章——上篇
文章目录1:前后端技术栈类比2:WebStorm的使用3:ES63.1 ES6新特性-let&const3.2 ES6新特性-结构&字符串3.3 ES6新特性-箭头函数3.4 ES6新特性-对象优化3.5 map,reduce3.6 promise异步编排3.7 模块化4:Node.js5:Vue6:Babel7:Webpack前面的学习给大家讲解了微服务最基本的Nacos,OpenFeign,GateWay,在我们进行正式开发前,我们对前端来进行简单的概述如果大家觉得我下面的文章写得好原创 2020-10-07 23:15:19 · 1273 阅读 · 1 评论 -
使用Vue脚手架进行模块化开发的流程和初始化vue项目的目录详解&运行流程,整合ElementUI快速开发
文章目录1:什么是模块化?2: Vue模块化环境搭建2.1 第一步:npm install webpack -g2.2 第二步:npm install -g @vue/cli-init2.3 第三步:初始化vue项目2.4 第四步:启动vue项目3:初始化vue项目的目录详解和运行流程1:什么是模块化?模块化是一种处理复杂系统分解为更好的可管理模块的方式。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。模块化就是把代码进行拆分,方便重复利用。原创 2020-10-07 23:14:22 · 825 阅读 · 2 评论