微服务分布式电商项目《谷粒商城》学习笔记
文章目錄
-
- 一、基本架構圖
- 二、配置
- 三、項目搭建
- 四、數據庫
-
- 1.開啟虛擬機,在windows下通過navicat連接上
- 2.人人開源:https://gitee.com/renrenio
- 五、微服務-注冊中心、配置中心、網關
-
- 1.導入公共依賴
- 2.配置Nacos Server地址
- 3.使用 @EnableDiscoveryClient 注解開啟服務注冊與發現功能
- 4.登錄nacos
- 5.版本確定
- 6.openFeign遠程調用
- 7.命名空間(配置隔離)和配置分組
- 8.gateway
- 六、商品服務
-
- (一) 分類維護
-
- 1.添加商品分類信息
- 2.前端發送請求獲取商品分類信息
- 3.配置網關路由和路徑重寫
- 4.跨域解決
- 9.Mybatis-plus邏輯刪除
- (二) 品牌管理
- 七、文件存儲
-
- (一)上傳方式
-
- 1.方式一
- 2.方式二:推薦使用
- (二)創建RAM子賬號
- (三)整合第三方服務
- (四)使用服務端簽名后直傳
- (五)設置跨域
- (六)添加JSR303數據校驗
-
- 1.JSR303數據校驗
- 2.系統錯誤碼定義
- 3.JSR303分組校驗(多場景的復雜校驗)
- 4.自定義校驗注解
- 5.SPU&SKU&規格參數&銷售屬性
- 6.屬性分組
- 7.品牌分組
- 8.下載插件mybatisX
- 9.p84的pubsub、publish
- 10.項目配置-設置批量啟動或內存設置
- 11.采購單需求
- 12.p100問題解決
- 13.分布式基礎篇總結
一、基本架構圖
二、配置
1、安裝linux虛擬機
2、下載docker容器
3、在docker容器上添加mysql和redis容器
4、windows下載redis、maven、vscode、node.js、數據庫、git
5、git配置github免密登錄
三、項目搭建
1、在github/碼云創建倉庫并拉取到本地,在本地創建并且到分支develop
1)、創建倉庫
2)、拉取代碼
github拉取master代碼
碼云拉取分支feature代碼
2、windows下的idea創建項目微服務
商品服務:com.atguigu.gulimall.product
倉儲服務:com.atguigu.gulimall.ware
訂單服務:com.atguigu.gulimall.order
會員(用戶)服務:com.atguigu.gulimall.member
優惠卷服務:com.atguigu.gulimall.coupon
1)、IDEA打開項目
2)、新建模塊(Springboot版本控制在2.2.0,可創建后修改版本號2.2.0)
其他同理可得
四、數據庫
1.開啟虛擬機,在windows下通過navicat連接上
注意需要先將文件設置為UTF-8,否則會中文亂碼。
復制相應內容粘貼,運行代碼
2.人人開源:https://gitee.com/renrenio
將三個項目clone到本地(記得刪除.git文件再放入目錄),renren-fast-vue作為前臺管理系統,renren-fast和renren-generator放在gulimall項目下:
0)、renren-fast-vue
使用vscode打開renren-fast-vue項目
npm install
報錯請看:
如使用npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass
https://www.cnblogs.com/tw6668/p/12507369.html
https://blog.csdn.net/hancoder/article/details/113821646
npm run dev運行項目
1)、放入renren-fast
創建gulimall_admin數據庫,然后運行sql文件。
刷新renren-fast-vue的前端頁面(賬號:admin、密碼:admin)
即完成前后聯調。
2)、導入renren-generator,用于逆向生成
把import導入的刪除,注解注釋。
補充:導入文件后,缺少工具類,需要從renren-fast中拿。(通過創建gulimall-common共用)
其他同理可得。
3)、公共依賴
gulimall-common添加公共依賴
<dependencies><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.2.0</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version></dependency><!-- httpcomponent包。發送http請求 --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.12</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><!--導入mysql驅動--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.17</version></dependency><!--tomcat里一般都帶--><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>
</dependencies>
gulimall-product項目及application.yml
auto表示實體id設置成自增
#application.yml
server:port: 10000
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://192.168.129.129:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driver# MapperScan
# sql映射文件位置
mybatis-plus:mapper-locations: classpath:/mapper/**/*.xmlglobal-config:db-config:id-type: auto
編寫測試類
說明:
可以用shift+F6修改模塊名
coupon=>sms 端口號:7000
member=》ums 端口號:8000
order=>oms 端口號:9000
product=》pms 端口號:10000
ware=》wms 端口號:11000
記得數據庫連接要配置
五、微服務-注冊中心、配置中心、網關
項目文檔地址:https://github.com/alibaba/spring-cloud-alibaba/
1.導入公共依賴
https://spring.io/projects/spring-cloud-alibaba
spring-cloud-alibaba-dependencies
spring-cloud-starter-alibaba-nacos-discovery
<dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
注:下載Nacos Server1.1.3的
https://github.com/alibaba/nacos/archive/refs/tags/1.1.3.zip
2.配置Nacos Server地址
server:port: 7000
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://192.168.129.129:3306/gulimall-sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Drivercloud:nacos:discovery:server-addr: 127.0.0.1:8848application:name: gulimall-coupon# MapperScan
# sql映射文件位置
mybatis-plus:mapper-locations: classpath:/mapper/**/*.xmlglobal-config:db-config:id-type: auto
3.使用 @EnableDiscoveryClient 注解開啟服務注冊與發現功能
4.登錄nacos
5.版本確定
版本選擇:Spring Cloud Hoxton.SR9(SpringCloud)=》2.2.6.RELEASE(SpringCloud)=》2.3.2.RELEASE(SpringBoot)
=>1.4.2(Nacos)
1.Spring Cloud Alibaba Version
地址: https://spring.io/projects/spring-cloud-alibaba=》確認 Spring Cloud Alibaba: 2.2.6.RELEASE
2.選擇Spring Boot Version,選擇 Nacos Version
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本說明
=》確認 Spring Boot: 2.3.2.RELEASE
=》確認 Nacos: 1.4.2
6.openFeign遠程調用
聲明式遠程調用:編寫一個接口,告訴SpringCloud這個接口需要遠程調用
模擬遠程調用
開啟遠程調用功能
測試結果
7.配置中心-統一處理
<!--配置中心來做配置管理-->
<dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
</dependencies>
bootstrap.properties(優先級最高)優于application.yml,application.properties
點擊發布
通過配置中心完成配置,無需修改文件
7.命名空間(配置隔離)和配置分組
每個微服務可以創建自己的命名空間,使用配置分組區分環境:dev,testing,prod
(1)新建命名空間
(2)配置分組
(3)bootstrap.properties配置命名空間和分組
例1:
例2:
7.加載多個配置集(從配置文件遷移到配置中心)
將application.yml的文件注釋掉
測試連接
8.gateway
修改版本
<dependency><groupId>com.atguigu.gulimall</groupId><artifactId>gulimall-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
<!--引入gateway網關-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><!--排除gateway 內部不兼容的 spring-web --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></exclusion></exclusions>
</dependency>
開啟網關服務注冊和發現
配置路由轉發
六、商品服務
(一) 分類維護
1.添加商品分類信息
將pms_catelog.sql文件的插入語句導入到表里
2.前端發送請求獲取商品分類信息
可配置請求端口
3.配置網關路由和路徑重寫
renren-fast添加服務注冊
沒有請求到對應路徑:
http://localhost:88/api =》http://localhost:88/api/captcha.jpg
真實目標路徑:http://localhost:8080/renren-fast/captcha.jpg
使用網關重寫功能:即可進行訪問
進行登錄:產生跨域問題
4.跨域解決
4.1
解決方案一:
解決方案二:使用后端網關進行跨域配置
4.2
不允許有多個 ‘Access-Control-Allow-Origin’ CORS =》同源策略堵塞
9.Mybatis-plus邏輯刪除
(二) 品牌管理
七、文件存儲
使用云存儲:阿里云對象存儲
(一)上傳方式
1.方式一
2.方式二:推薦使用
(二)創建RAM子賬號
(三)整合第三方服務
(四)使用服務端簽名后直傳
(五)設置跨域
通過服務端加密,然后前端請求拿到相關簽名數據,然后上傳圖片到OSS
使用vue插件查看logo地址
(六)添加JSR303數據校驗
1.JSR303數據校驗
1)給Bean添加校驗注解:javax.validation.constraints,并定義自己的message提示
2)開始校驗功能@Valid
效果:校驗錯誤以后會有默認的響應
3)給校驗的bean后緊跟一個BindingResult,就可以獲取到校驗的結果
gulimall-common添加依賴
Spring2.3.0及以后版本沒有集成validation包,需要導入Spring Boot Starter Validation
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.系統錯誤碼定義
3.JSR303分組校驗(多場景的復雜校驗)
1)@NotBlank(message = “品牌名不能為空”, groups = {AddGroup.class, UpdateGroup.class})給注解標注什么情況需要進行校驗
2)@Validated({AddGroup.class})
3) 默認沒有指定分組的校驗注解@NotBlank,在分組校驗情況@Validated({AddGroup.class})下不生效
4.自定義校驗注解
1)編寫一個自定義的校驗注解
2)編寫一個自定義的校驗器
3)關聯自定義的校驗器和自定義的校驗注解
注意:(以及國際化相關的)
ValidationMessages.properties =》涉及校驗注解的message默認值配置
@Constraint(validateBy={})=>指定用什么東西來校驗,點擊validatedBy了解ConstraintValidator,有兩個方法initialize和isValid
5.SPU&SKU&規格參數&銷售屬性
6.屬性分組
在gulimall_admin刪除sys_menus,重新導入
7.品牌分組
重新導入到pms_category
讓分類維護恢復初始數據
8.下載插件mybatisX
9.p84的pubsub、publish
p84 關于pubsub、publish報錯,無法發送查詢品牌信息的請求:
1、npm install --save pubsub-js
2、在src下的main.js中引用:
① import PubSub from ‘pubsub-js’
② Vue.prototype.PubSub = PubSub
如果 npm install --save pubsub-js 安裝報錯的話,可以試一下 cnpm install --save pubsub-js
10.項目配置-設置批量啟動或內存設置
11.采購單需求
12.p100問題解決
插入sql
INSERT INTO sys_menu (menu_id, parent_id, name, url, perms, type, icon, order_num) VALUES (76, 37, '規格維護', 'product/attrupdate', '', 2, 'log', 0);
index.js的children: []添加
{ path: '/product-attrupdate', component: _import('modules/product/attrupdate'), name: 'attr-update', meta: { title: '規格維護', isTab: true } }
attrupdate.vue添加if (item.attrs != null) {}判斷
13.分布式基礎篇總結
總結
以上是生活随笔為你收集整理的微服务分布式电商项目《谷粒商城》学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欧几里得范数_从范数到正则化
- 下一篇: python调用robotframewo