电商项目
文章平均质量分 51
迪恩_Emma
喜欢看书的Java开发
展开
-
亮点5:redis在项目中的运用
原创 2021-07-11 12:28:50 · 261 阅读 · 0 评论 -
电商系统架构图
原创 2021-06-19 19:41:19 · 2148 阅读 · 0 评论 -
21.秒杀服务(sentinel熔断降级)
前端限流、恶意请求拦截:判断是否登录秒杀系统有2种模式:1)结合前面的订单服务,只是QPS增高了而已2)方法二的流程:判断登录-->合法性校验-->获取信号量-->放入mq中熔断:降级:限流:熔断限流的功能使用spring cloud 的sentinel实现:自定义拦截信息:使用Sentinel保护Feign,也就是熔断:先在xml中打开senti...原创 2021-06-19 19:40:21 · 556 阅读 · 0 评论 -
亮点4:短信服务、路径映射
原创 2021-06-13 22:34:55 · 107 阅读 · 0 评论 -
亮点3:缓存、分布式锁
原创 2021-06-13 21:10:52 · 95 阅读 · 0 评论 -
亮点2:单点登录
原创 2021-06-12 22:35:54 · 124 阅读 · 0 评论 -
亮点1:项目中用到多线程的地方
1.下单确认页2.商品详情页3.加入购物车操作原创 2021-06-12 20:25:53 · 567 阅读 · 0 评论 -
20.下单服务(mq、分布式事务)
mq介绍:交换机的类型:1.direct 2.fanout 3.topic 4.headers(一般不用)direct点对点通信模式:fanout:广播模式topic:部分广播RabbitMQ的消息确认机制——可靠抵达订单服务的流程:mq在下单服务是为了解决分布式事务的问题:远程服务假失败:远程服务其实成功了,由于网络问题没有返回,会导致:订单回滚,但是远程事务不会回滚本地事务@Trans...原创 2021-06-08 21:35:50 · 980 阅读 · 0 评论 -
19.下单服务(Feign远程调用丢失请求头、Feign异步丢失上下文、幂等性)
跳转到结算页,获取订单确认页需要的数据时,出现以下3种问题:1.Feign远程调用丢失请求头的问题:order模块里调用了member、cart模块,但是本地cookie里没有数据,请求头中没有携带Cookie,就会被认为没登录解决:写一个filter,把原来的请求头给当前的新请求加上2.Feign异步丢失上下文问题:因为使用的是ThreadLocal传递数据,但是ThreadLocal的数据统一只能在同一个线程下,而异步情况是开了几个不同的线程,此时ThreadLoc.原创 2021-06-08 21:17:12 · 509 阅读 · 0 评论 -
18.购物车服务(ThreadLocal)
1.获取购物车数据(去购物车页面)先判断用户是否登录了:i)如果登录了,就获取登录用户的购物车和临时购物车进行合并(也要判断临时购物车是否有数据)合并后清除临时购物车的数据,再去登录后用户的购物车ii)如果未登录,获取临时购物车所有购物项判断用户是否登录使用了ThreadLocal:利用一个过滤链,要实现HandlerInterceptor,还要把过滤链加入到过滤列中在目标方法执行之前判断是否有用户信息:把用户信息放到ThreadLocal里,这样就实现了多.原创 2021-06-01 22:13:31 · 349 阅读 · 0 评论 -
17.分布式下session不同步问题(单点登录)
分布式服务下session不同步问题:1.不同域名不会保留session2.相同域名的服务器复制多份,也不会保存session第一种是同域名,第二种是不同域名相同域名复制多份解决方案:1)session复制(存在后端服务器)2)session存储在客户端中3)hash一致性,一一对应到客户端cookie中,但本质还是存在客户端4)统一存储到redis等缓存中不同域名解决方案:(使用SpringSession)sess...原创 2021-05-22 22:41:59 · 518 阅读 · 3 评论 -
16.第三方短信服务、路径映射、认证中心、第三方登录
一、短信服务要到阿里云里开通短信服务短信服务的参数:skin是皮肤选项,sign是模板选项要在yml文件中配置:配置component要用到一个HttpUtils二、写好短信服务后,将它放到认证服务的远程接口处用户注册时要用到短信服务:1.手机+验证码存到redis中,因为不是永久数据i)发送短信之前,先从redis中获取验证码,判断是否在60s内,如果在60s内就不要重复发送,返回错误信息ii)判断是否在60s内的方法:当前...原创 2021-05-17 11:27:14 · 259 阅读 · 0 评论 -
15.缓存、分布式锁
开始写商城购物的代码,第一步是首页的商品渲染:一级、二级、三级菜单渲染:在后台,建立一个web包,与app、service包同级,但这个是管理商城购物业务的代码查询一级菜单:这个方法用于,商城首页的跳转,定制多个首页地址例如:"/"和"index.html"逻辑是:父分类id为0就表明是一级分类查询二级、三级分类:利于一个自定义的Catelog2Vo来封装Catelog2Vo:二级分类中包含:1*)父分类的id,也就是一级分类...原创 2021-05-10 22:12:46 · 165 阅读 · 0 评论 -
14.商品上架(上传商品数据到es)
商品上架功能是在product的spuInfoController里上架功能要改变的:1)商品的状态2)把数据上传到es中 i)在spu中查出可检索的sku ii)查询sku的库存,判断是否有库存1)将远程调用的语句放在try/catch语句里,确保就算远程调用失败,也不是返回事务。仍然要执行下面的操作2)这个形式是在R里定义的集合方法,作用是:每次两个方法转换的时候就不用每次都使用JSON.parseObject()方法进行转换了...原创 2021-05-06 20:15:14 · 834 阅读 · 0 评论 -
13.elasticsearch和kibana在linux下的下载安装
elasticsearch与mysql的区别:索引就是数据库,类型就是数据表,文档就是数据,属性就是列elasticsearch比mysql查询数据有好处是因为它用了倒排索引:意思是每个句子都拆分为多个单词,将单词标上这个句子的索引,当有一个要检索的句子出现时,根据每个单词的记录数,得出相关性得分在linux下安装es和kibana的坑:1)es分配端口失败,解决:重启docker后成功显示2)3)根据docker logs elasticsearch...原创 2021-05-02 21:23:18 · 144 阅读 · 0 评论 -
12.采购与库存管理
这里的主要代码是要改变采购单和采购项的status状态,有下面这几种状态,分成2类。集合成了枚举的形式:1)合并采购需求创建一个MergeVo类来接收i)判断提交的数据中是否携带了purchaseId,也就是采购单。如果没有要自己新建一个ii)合并。拿到最后的采购单后(原来就有的或是新增的)iii)更新采购单的时间2)领取采购单i)确认当前采购单是新建或是已分配状态(0或1),符合条件的就将状态设置为已接受ii)改变了购物单的状态后,购物项...原创 2021-05-02 21:13:35 · 270 阅读 · 0 评论 -
11.远程调用
保存积分、优惠信息要用到远程调用,也就是调用别的服务器上的接口1)在调用者方添加一个feign包,存放远程调用的接口 i)在最前面要加上@FeignClient("xx")表明引用的是哪个服务器,比如:interactive-coupon ii)url地址要写绝对路径,也就是coupon、product等也要带上 iii)To互传的双方都要用的实体类,放在common里 iv)该方法不需要写方法体,是被调用者的接口的复制2)调用者方的启动类...原创 2021-04-30 20:46:30 · 225 阅读 · 2 评论 -
10.发布商品—保存spu和sku的基本信息
1)发布商品时,包括了“基本信息”、“规格参数”、“销售属性”、“sku信息”的保存最后的前端出现的笛卡尔积结果如下,要把这些信息保存到后台数据库中,就要建立相应的实体类因为json文件较冗杂,这里使用json自动创建java实体类工具进行创建(网上一搜就有很多)建立好放在SpuVo包下最后保存使用的时SpuSaveVo,它里面包含了多个子类。要记得把id更改为Long型,长度更改为BigDecimal类型2)重写spuInfo的save方法分为多个模块:.原创 2021-04-27 21:29:46 · 1800 阅读 · 0 评论 -
9.前端PubSub无法找到
完成了属性分组、规格属性、销售属性的模块后,再接着往下完成商品发布模块此时前端出现一个问题:TypeError: Cannot read property ‘publish‘ of undefined1)下载1.8.0的版本而不是最新的1.9.0,可能会不支持publish2)引入PubSub,并且使用时删去this.i)brand-select.vueii)category-cascader.vue也是要引入PubSub(省略),使用时去掉.this...原创 2021-04-23 21:34:53 · 533 阅读 · 0 评论 -
8.规格参数(多对多关联表)
新增功能:传入的是AttrVo,而不是AttrEntity,因为AttrEntity中没有attrGroupId。则要设置一个Vo,自定义属性字段知识补充:PO:持久对象。对应数据库中某个表中的一条记录,多个记录可以用PO的集合VO:往往是自定义信息,不是实体类的全部字段vo中不需要标注与数据库有关的注解controller:service:1)加一个@Transactional事务注解2)保存"规格属性"时,要同时保存关联表中的相关信息...原创 2021-04-21 20:55:18 · 302 阅读 · 0 评论 -
7.品牌关联(多对多中间表)
背景是:一个品牌对应多个分类,一个分类也可能对应多个品牌显然是一个多对多的关系,要建一个中间表实现查询方法,开发文档中的接口如下:传入的是品牌id(brandId),返回的数据有分类id和分类名controller:i)@RequestParam表示传入的参数ii)QueryWrapper中eq里写的是brand_id而不是brandId,因为要与数据中的字段相同保存save功能:因为传入的参数中没有分类名和品牌名,需要后台根据分类id和品牌id进行...原创 2021-04-19 20:27:00 · 490 阅读 · 0 评论 -
6.级联选择器(查三级分类路径和父类路径)
三级分类在前面的“分类维护”模块有用过,把它封装到前端common的category.vue里,然后当作component再import进要使用的页面vue前端级联选择器省略,主要讲讲后端使用到的技术1.按照点击的三级分类中的任意选项,传到后台查询信息i)根据开发文档,前端传到后端的数据带有一个keyii)点击三级分类,会带有该层的catelogId下面的方法是由自动生成的方法改造的,因为之前的方法不满足我们的要求,就自定义了一个queryPage方法,传入params(..原创 2021-04-18 20:19:04 · 774 阅读 · 0 评论 -
5.JRS303校验
在填写表单时,前后端都要进行校验,前端往往是对非空、是否满足正则表达式进行校验这里主要讲讲后端的校验注解JRS303:1.一般校验注解都在这个包下普通校验:2.校验注解放在2个地方:i)controller的传参入口处(保存和修改接口)加@Valid:ii)Entity类对象的具体属性名上:message可以自定义错误信息,否则就是源代码中的默认错误信息启动后,若不满足填写要求,会有相应的响应信息:3.以上的信息形式不是我们需要的...原创 2021-04-17 21:54:18 · 881 阅读 · 0 评论 -
4.文件存储oss
实现第三方服务—文件存储功能:在前端的品牌管理模块需要文件上传存储功能,就来做一下吧以前的项目可能是通过一个服务器上传到一处就可以了,但这个项目是分布式,分了很多个服务器文件存储,就不能只存在一台服务器,要存在一个地方(例如:阿里云oss)配置阿里云oss:熟悉一下阿里云oss存储的资源术语:解释:i)一个项目一个Bucketii)Endpoint是存储的地址iii)AccessKey相当于账号密码新建一个bucket,以下是关键步骤:i)低...原创 2021-04-16 20:52:34 · 673 阅读 · 1 评论 -
3.逻辑删除
完成了分类维护的三级分类显示后,对其进行优化,进行逻辑删除功能完善第一步:在配置文件yml里配置逻辑,1为已删除,0为未删除第二步:在Entity中指定一个属性为逻辑删除的指定属性注解:@TableLogic(value="1",delval="0")第三步:利用Postman进行接口测试,这里PostMan与Swagger使用时的区别是:postman与swagger的区别是,前者可以测试前端传到后端由网关转换过的端口(如:88/api),而swagger则只能测试后.原创 2021-04-15 10:16:44 · 1174 阅读 · 0 评论 -
2.三级分类
1.最开始遇到一个导包问题:module里的common模块无法导入新模块,全爆红解决:在common模块的Lifecycle下进行package操作,打包完成后重新导入,发现可以成功导入2.今天加一个三级分类的模块第一步:在之前加了sql,前端显示的基础上,利用代码自动生成器(renren-generator)生成前后端代码第二步:在显示页贴入自定义的前端代码,改进为三级分类显示第三步:先写个后端接口TODO,用于测试是否能连通前后端,发现无法获取数据因为gatewa.原创 2021-04-15 10:11:15 · 441 阅读 · 0 评论 -
1.创建项目第一步
开始电商项目的创建,我使用的后台框架是renren-fast的前后端分离框架,已经配好了shiro第一步:新建模块,导入renren-fast、renren-generator、vue-admin第二步:将通用的包放入common模块中第三步:配网关gateway要注意的点:renren-fast的router是动态的,更改数据库的信息,这一栏会变化...原创 2021-04-14 10:06:30 · 116 阅读 · 0 评论