学习笔记 谷粒01 搭建

基础概念

微服务

  • 微服务就是将项目的各个模块拆分为可独立运行、部署、测试的架构设计风格。

分布式

  • 不同的业务在不同的地方

集群

  • 几台服务器集中在一起实现某种业务,(分布式每个节点都可以做集群,用户服务压力大分为10个)

远程调用

  • 服务之间的相互调用,Http+Json

 负载均衡 

  • 将请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。
  • 轮询, 线性轮询的方式依次选择每个服务实例

服务注册与服务发现?

  • 服务注册,就是将提供某个服务的模块信息(通常是这个服务的ip和端口)注册到1个公共的组件上去(比如: zookeeper\consul)。
  • 服务发现,就是新注册的这个服务模块能够及时的被其他调用者发现。不管是服务新增和服务删减都能实现自动发现。

配置中心

  • 集中管理微服务配置信息

服务熔断和降级

  • 降级   服务发生异常或调用超时,返回默认数据
  • 熔断   某段时间失败次数太多了,触发熔断,拒绝全部请求
  • 限流   最多允许n个请求访问

API网关

  • 统一入口,动态路由,认证授权,令牌限流,负债均衡 ribbon,熔断限流 sentienl
  • 统一认证,负债均衡,熔断限流,动态路由

  微服务架构流程 

  • 前后分离开发
  • 内网部署和外网部署,外网面向公众访问,部署前端项目(APP,PC);内网部署后端集群
  • 前端页面发送请求到后端,经过Nginx集群,
  • API网关(SpringCloud gateway)(动态态路由到指定的服务(商品服务) ,负载均衡(调用其中一台), 认证授权、(熔断降级,限流(sentinel)) ) 
  • 到达服务(SpringBoot)
  • 服务的相互调用(OpenFeign)
  • 有些请求需要认证授权(OAuth2.0。SpringSecurity)
  • 缓存使用Redis集群(分片+哨兵集群)。
  • 持久化使用MySQL,读写分离和分库分表。
  • 消息队列(RabbitMQ)异步解耦,分布式事务的一致性。
  • 全文检索商品(ElasticSearch)
  • 存取数据(阿里云的对象存储服务OSS)
  • 快速定位问题,ELK处理日志,LogStash收集业务日志,ES存储,Kibana可视化页面从ES中检索出相关信息
  • Nacos作为注册中心,(服务注册到注册中心)
  • Nacos配置中心,(统一的动态配置,同步更改)
  • 服务追踪,追踪服务调用链哪里出现问题(Sleuth、Zipkin、Metrics),把每个服务的信息交给开源的Prometheus进行聚合分析,再由Grafana进行可视化展示,提供Prometheus提供的AlterManager实时得到服务的告警信息,以短信/邮件的方式告知服务开发人员。
  • 持续集成和持续部署。提交github,Jenkins打包成docker镜像,由k8s集成docker服务,将服务以docker容器的方式运行。

创建项目

  • gav=gulimall,com.atguigu.gulimall,0.0.1-SNAPSHOT

 创建5个Spring Initializr子module

  • Group:com.atguigu.gulimall
  • artifact:gulimall-coupon gulimall-member  gulimall-order  gulimall-product  gulimall-ware
  • package: com.atguigu.gulimall.coupon  com.atguigu.gulimall.member  
  • com.atguigu.gulimall.order com.atguigu.gulimall.product com.atguigu.gulimall.ware

 选中需要导入的依赖:

  • Web:Spring Web  ,Spring Cloud Routing:OpenFeign  (微服务都需要调用与被调用)

快速创建相同模块,效率太慢废弃

  • copy,paste项目,修改Name,Pom(artifactId,name,description),包名,点击+号加入maven管理,(一定要按住Shfit F6修改包名)
  • 删除test,java下面的包
  • 修改启动类

快速创建相同模块,效率太慢废弃

  • copy,paste项目
  • 全文搜索,Shift+Ctrl+F6,选择direct,替换product为coupon
  • 单独替换包和类的文件名

建立新项目最快速方式

  • Spring Initializr 设置 gav

聚合子模块,项目pom

  • pom

修改springboot+springcloud的版本,否则可能会报错

忽略mvn

**/mvnw
**/mvnw.cmd
**/.mvn

双击PDM打开PowerDesigner

  • 双击打开表,字段的Name是备注,preview可以查看Sql语句

创建数据库

  • gulimall_admin.sql,gulimall_oms.sql,gulimall_pms,gulimall_sms,gulimall_ums,gulimall_wms
  • create database `gulimall_admin` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

人人开源作为后台前后端

  • 人人开源
  • git clone https://gitee.com/renrenio/renren-fast-vue.git
  • git clone https://gitee.com/renrenio/renren-fast.git

3.1.renren-fast(后端)

  • 1.clone到gulimall项目中,并删除.git文件
  • 2.gulimall的pom文件配置该renren-fast模块 renren-fast
  • 3.创建数据库gulimall-admin(基于db.mysql.sql文件)
  • 4修改“application-dev.yml”文件,默认为dev环境,修改连接mysql的url和用户名密码    driver-class-name:    url:   username: root  password: root
  • 访问:http://localhost:8080/renren-fast/  admin,admin

3.2.renren-fast-vue(前端)

2.管理员身份打开vs-code,并打开文件夹renren-fast-vue

  • 选中文件右键(集成终端打开)
  • npm install    #下载所有包
  • npm run dev  #启动

结构

  • build/webpack.dev.conf.js,webpack配置文件,包含项目在开发环境打包和运行的相关配置
  • static\config\index.js,api 访问接口

3.1.renren-fast(后端)

  • 1.clone到gulimall项目中,并删除.git文件
  • 2.gulimall的pom文件配置该renren-generator模块 renren-generator
  • 3 修改“application.yml”文件,修改连接mysql的url和用户名密码    driver-class-name:    url:   username: root  password: root
  • 4.修改generator.properties【重复5遍】

代码生成器生成模块基础代码,修改generator.properties #配置信息

  • mainPath=com.atguigu   #主目录
  • package=com.atguigu.gulimall #包名
  • moduleName=product  #模块名
  • tablePrefix=pms_  #表前缀(类名不会包含表前缀)【java bean会去掉表前缀创建bean类】 

生成各模块代码

  • moduleName=product  #模块名 使用包名+模块名拼接包名,resource下也会使用
  • tablePrefix=pms_  #表前缀(类名去掉表前缀) 
  • 修改连接数据库

创建公共模块gulimall-common

  • new module->maven->artifactid:gulimall-common 
  • 加入公共依赖  mybatisplus, lombok ,commons-lang(StringUtils),  httpcore(R(http响应码)),mysql-connector-java(驱动),servlet-api
  • 引入公共类,(renren-fast的utils包下的Query(查询),PageUtils(分页)、R(返回类)、Constant(常量),RRException(异常)
    复制到utils,复制xss包(删除xss类))
  • 各子模块引入common

修改代码生成器(generator)模板(模板文件在resource/template)

  • 注释shiro注解RequiresPermissions

代码生成器生成模块基础代码,模块修改

  • 删除resourc/src(前端代码)

所有模块整合mybatisplus

common模块引入依赖mybatisplus,mysql驱动

配置yml

  • 配置数据源
  • 配置mybatisplus(mapperxml路径location),主键自增(idtype)

配置@MapperScan注解 (右键copy Reference)(扫描dao(@Mapper)接口)

说明

  • classpath* 扫描自己包下+引用jar包的类路径

书写技巧:

  •  只用敲击配置属性最后一个英语字母会有智能提示

整合各模块

  • 1 生成代码
  • 2 引入common
  • 3 整合mybatisplus
  • 4 修改端口号

参考

Java项目《谷粒商城》Java架构师 | 微服务 | 大型电商项目_哔哩哔哩_bilibili

谷粒商城-个人笔记(基础篇一)_代码的知行者的博客-CSDN博客_谷粒商城

Linux开发环境配置(Docker) · 语雀

你可能感兴趣的:(谷粒,JAVA)