image.png
商城后端架构图
nginx限流:限制清流得流量
gateway限流:限制各个微服务得流量,怕出现总的流量不多,但是都集中在某个微服务导致系统崩溃
nacos实现服务注册发现
feign实现服务远程调用

发现虚拟机不对劲,请参照以下配置

虚拟机连接不上的一定要把虚拟机改成net模式,右键左侧虚拟机列表里的changgou,点击设置,然后再找到列表里的网络适配器,确保是net模式而不是桥接模式,桥接模式会导致ip不固定这个问题懂得都懂。第一步:cd/etc/sysconfig/network-scripts/找到这个文件夹下的ifcfg-ethxx,注意:由于网卡版本不同,所以我用ifcfg-ethxx来说明,有的是ifcfg-eth0,有的是ifcfg-eth33。第二步:打开这个文件,输入vim /ifcfg-ethxx第三步:打开vm软件的上方的菜单栏中的编辑,然后找到虚拟网络编辑器,然后点击右下方的更改设置,此时编辑器关闭。然后再次重复第三步操作,然后点击列表中的VM8 net模式。第四步:点击HDCP设置,然后找到起始ip地址和结束ip地址,这两个ip随意记到记事本上,也可以取两个ip之间的任意范围记到记事本上,这个就是静态ip。然后点击net设置,记下网关地址。第五步:回到第三步,开始编辑配置文件,将其中的BOOTPROTO=后面改成static,然后将IPADDR改成第四步的静态ip,GATEWAY改成网关,DNS1与网关一致即可。NETMASK=xxx可以把这一行直接去掉第六步:重启网络,控制台输入service network restart即可。注意:navicat如果连接不上可以尝试连接22端口,如果22端口连接的上,那铁定是linux防火墙没关,自己可以网上搜索永久关闭防火墙的命令,然后重启就好了
nvicat 下载安装和破解

navicat安装教程

参考链接


maven依赖爆红的排查步骤

参考链接

maven依赖管理(冲突检查)插件 maven helper

idea快捷键

全局搜索快捷键 ctrl+shift+f

mybatis-plus、通用mapper和Mybatis-generator的对比链接

mybatis-plus 查询所有内容 mapper.selectList(null) 返回泛型list
父工程打包方式应该为pom格式,用来做版本控制,里面包含很多jar包

mybatis-plus 设置表名
参考链接

fastDFS

image.png
冗余备份、负载均衡、线性扩容

  1. storage定时向控制中心注册(表示我现在还活着,我当前是什么状态)
  2. 用户上传文件,访问tracker
  3. 收到请求后,从tracker中选择可用的storage
  4. 返回给用户可用的storage
  5. 根据返回的可用storage实现文件管理

docker(详见第二天笔记)

进入某个docker容器 : docker exec -it docker容器名 /bin/bash
例: docker exec -it tracker /bin/bash(进入tracker容器)

tracker端口号查看参考链接

fastdfs时候,如果修改了ip地址,需要重新安装tracker和storage

错误:
使用FastDFS遇到问题:“Java.lang.Exception: getStoreStorage fail, errno code :2”
问题分析:
1、配置文件有问题
2、storage没启动

第三天—-商品发布

tb_template: 模板表
tb_spec: 规格表
tb_para:参数表
tb_spu:某款商品得公共属性 (华为p30)
tb_sku:某款商品中某类商品得信息 (华为p30(红色)、华为p30pro、p30(黑色)

不分spu和sku得情况举例
image.png
区分spu、sku举例
image.png

表分析:
tb_category(分类表):
parent_id(分类id):0表示1级分类 ,其他二级和三级分类在查询其parent_id为所属的1级分类或2级分类的id值

由分类确认了模板、品牌

模板确认了规格、参数

插入一条商品代码的流程:

  1. 首先选择分类:
  • 图示如下:

image.png

  • 后端逻辑:

首先展示出所有的一级分类表(展示出tb_category中所有parent_id为0的信息)
根据用户选择的一级分类的id作为pid参数,用该pid参数查询二级分类的信息
以二级分类id作为pid,查询所有的三级分类,用户选择最后的三级分类,进入下一步界面

  1. 填写商品信息界面
  • 图例:

image.png

  • 后端逻辑(该页面只有商品品牌是需要从数据库找的):

根据分类id(该分类id是前台传回来的)查询品牌id(查询tb_category_brand分类品牌关联表,从分类找到对应的品牌)

  1. 填写商品属性(商品规格、参数)
  • 图例:

image.png

  • 后端逻辑:

前端传回来分类id

  1. 根据分类id查询模板id
  2. 根据模板id查询所有的商品属性和商品参数展示在页面上

在页面点击提交后,封装前端传回来的所有信息为一个组合对象(good)
该good可以分成两个javabean,分别保存在spu和sku表中
goods中sku是list(对应不同参数的同款商品)
提交后则进入新增逻辑:
findGoodsById(spuid 该id由前端传回来) —->save(goods 该goods由findGoodsById查出来)

下架、逻辑删除、审核等功能就是改数据库中对应的状态码字段

一般大型项目不会设置外键,而是通过再设计一个关系表来实现表和表之间的关联
因为设置外键后,每次增删改都需要查看外键列是否为null,这样效率会比较低

day4

广告
tb_content: 广告表
tb_content_category : 广告分类表

为什么首页广告用缓存?
因为广告变化的频率相对较低
首页访问的频率相对较高,所以用缓存实现
image.png
广告模块访问流程图

广告访问后端处理逻辑:

  1. 编写lua脚本,实现缓存操作
  2. 配置nginx的server,拦截 特定的处理广告的请求
  3. 拦截后,交给lua脚本处理

lua脚本编写
image.png

安装redis desktop manager以可视化redis操作
简单使用和安装参考链接

下载安装jmeter 参考链接,注意最后是通过.sh后缀得文件打开得,不是.bat

如何安装maven仓库中没有的依赖, 前提是要获得待安装依赖的整个工程文件
进入该工程的顶级文件夹(有pom文件的文件夹) 然后在该目录下 调出cmd终端
终端输入 mvn install 即可

openfeign

是一种声明式(声明式调用是指就像调用本地方法一样调用远程方法,无需感知操作远程http请求)、模板化的http客户端。
在springcloud中当所有微服务都被注册在eureka中时,不同的微服务之间就可以通过openfeign互相调用

使用时在
@FeignClient 注解 @FeignClient注解中标识出准备调用的是当前服务场中的哪个服务
参考链接

提交数据(来自前端):
map:keywords 华为
category:手机

响应数据:
map:
搜索到的结果集合:
categoryList:分类条件集合

多条件搜索怎么做:

  1. 拆分
  2. 输入输出都是map

bug
feign.FeignException: status 404 reading SkuFeign#findByStatus(String)
image.png
出现404,网上更多的都说是路径有问题,服务没有被找到,当然这可能是大概率原因,实际上如果参数为空或者形式不多也会报这个错。因此,遇到这样的问题可以从两个方面入手:一是路径,二是传参。
参考链接

day7

如何提升网页访问速度:

  1. 用缓存
  2. 用静态页

    Error in created hook: “SyntaxError: Unexpected token u in JSON at position 0“

    image.png
    解决方法:skuList为空,报错

day8

微服务网关的作用:

  1. 整个各个微服务功能,形成一套或者多套系统,
  2. 提供了统一的访问入口,降低了服务器受攻击面继
  3. 在微服务网关中实现日志统一记录,可以统一监控,进行用户访问跟踪
  4. 提供了统一跨域解决方法
  5. 实现限流操作,保护微服务,防止雪崩效应发生。
  6. 用户权限认证操作

image.png
jwt令牌 + gateway工作流程

day10
公钥应该以txt为后缀才会正常读取

bug

Error creating bean with name ‘jwtAccessTokenConverter‘ defined in class path resource

原因分析:因为publikey没有正确加载,将其后缀从.key改为.txt问题解决

不知道哪里有问题,就重启一下电脑