• 【SpringCloud微服务项目学习-mall4cloud项目(1)】——环境部署,构建与运行


    mall4cloud项目介绍

    • mall4j商城系统
      首先介绍一下mall4j,是一个基于spring boot、spring oauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁,为生产环境多实例完全准备,数据库为b2b2c设计,拥有完整sku和下单流程的完全开源商城。
    • mall4cloud商城系统
      mall4cloud是mall4j的微服务架构。具有微服务架构,分布式部署,静态化分离,高性能高并发,支持负载均衡,支持多端开发特点

    商城是基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的微服务B2B2C电商商城系统,采用主流的互联网技术架构、全新的UI设计、支持集群部署、服务注册和发现以及拥有完整的订单流程等,代码完全开源,没有任何二次封装,是一个非常适合二次开发的电商平台系统。

    商城致力于为中大型企业打造一个功能完整、易于维护的微服务B2B2C电商商城系统,采用主流微服务技术实现。后台管理系统包含平台管理,店铺管理、商品管理、订单管理、规格管理、权限管理、资源管理等模块。

    在这里插入图片描述
    因最近将项目的环境部署并运行了一下,通过阅读源码,发现是一个很完整的springcloud项目。现在通过笔记方式再次记录一下,学习其中的微服务架构设计和B2B2C电商商城系统的一些解决方案。

    源码地址

    因官方源码使用的是jdk17,和自己平时用的jdk11和1.8有些区别,就将项目的jdk环境还原到了1.8版本
    github:

    https://github.com/cjy-chenjy/mall4cloud-cjy
    fork自https://github.com/gz-yami/mall4cloud
    gitee:
    https://gitee.com/cjy7007/mall4cloud
    fork自https://gitee.com/gz-yami/mall4cloud

    从上述地址可以pull源码,且md文件中有具体的介绍,就不照搬了
    在这里插入图片描述

    开发环境搭建

    github的文档中详细给了开发文档和环境搭建视频,且环境通过docker-compse比较方便。对于环境搭建做以下补充:
    1、关于中间件使用的服务器:

    服务器建议新开一个虚拟机,因项目的数据库和一些环境都是重新通过docker搭建,可能会和已使用过的端口冲突。配置建议内存4核6g以上,因为项目的中间件启动还是需要占用较多内存
    或者使用一台云服务器,毕竟任何时候都可以连接。配置也需要至少选择2核4g,作者就是这样的一台服务器,但是启动一些中间件还是比较费劲😂。就像rocketMQ没有启动dashboard,es没有启动kibana等,只启动了一些主要服务。

    2、docker-compse文件介绍
    根据视频可以完整的将docker-compse环境搭建起来,对文档中的一些内容增加注释如下:

    version: "3.5"
    
    services:
      mall4cloud-mysql:
        image: mysql:8.0
        container_name: mall4cloud-mysql
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=root # 设置MySQL的root用户密码
        ports:
          - 3306:3306 # 映射容器内部3306端口到宿主机的3306端口
        volumes:
          - ./mysql/data:/var/lib/mysql # 将宿主机的目录挂载到容器的/var/lib/mysql目录
          - ./mysql/conf.d:/etc/mysql/conf.d # 将宿主机的目录挂载到容器的/etc/mysql/conf.d目录
          - ./mysql/initdb:/docker-entrypoint-initdb.d # 将宿主机的目录挂载到容器的/docker-entrypoint-initdb.d目录
    
      mall4cloud-minio:
        image: minio/minio:RELEASE.2021-06-17T00-10-46Z
        container_name: mall4cloud-minio
        restart: always
        command: server /data # 启动MinIO服务器并指定数据目录
        ports:
          - 9000:9000 # 映射容器内部9000端口到宿主机的9000端口
        volumes:
          - ./minio/data:/data # 将宿主机的目录挂载到容器的/data目录
        environment:
          - MINIO_ROOT_USER=admin # 设置MinIO的管理员用户名
          - MINIO_ROOT_PASSWORD=admin123456 # 设置MinIO的管理员密码
    
      mall4cloud-redis:
        image: redis:6.2
        container_name: mall4cloud-redis
        restart: always
        ports:
          - 6379:6379 # 映射容器内部6379端口到宿主机的6379端口
    
      mall4cloud-nacos:
        image: nacos/nacos-server:v2.2.0-slim
        container_name: mall4cloud-nacos
        restart: always
        depends_on:
          - mall4cloud-mysql # 确保在启动前依赖于MySQL服务
        ports:
          - 8848:8848 # 映射容器内部8848端口到宿主机的8848端口
          - 9848:9848
          - 9849:9849
        environment:
          - JVM_XMS=256m # 配置JVM的最小内存分配
          - JVM_XMX=256m # 配置JVM的最大内存分配
          - MODE=standalone # 设置Nacos运行模式为独立模式
          - PREFER_HOST_MODE=hostname
          - SPRING_DATASOURCE_PLATFORM=mysql
          - MYSQL_SERVICE_HOST=192.168.1.46 # MySQL数据库的主机地址
          - MYSQL_SERVICE_DB_NAME=mall4cloud_nacos # Nacos使用的数据库名
          - MYSQL_SERVICE_USER=root # 连接MySQL的用户名
          - MYSQL_SERVICE_PASSWORD=root # 连接MySQL的密码
        volumes:
          - ./nacos/logs:/home/nacos/logs # 将宿主机的目录挂载到容器的日志目录
        
          mall4cloud-seata:
        image: seataio/seata-server:1.6.1
        container_name: mall4cloud-seata
        restart: always
        depends_on:
          - mall4cloud-mysql
          - mall4cloud-nacos
        ports:
          - 8091:8091 # 映射容器内部8091端口到宿主机的8091端口
          - 7091:7091
        environment:
          - SEATA_IP=192.168.1.46 # Seata服务器IP地址
        volumes:
          - ./seata/application.yml:/seata-server/resources/application.yml # 将宿主机的配置文件挂载到Seata容器
    
      mall4cloud-elasticsearch:
        image: elasticsearch:7.17.5
        container_name: mall4cloud-elasticsearch
        restart: always
        ports:
          - 9200:9200 # 映射容器内部9200端口到宿主机的9200端口
          - 9300:9300
        environment:
          - discovery.type=single-node # 设置Elasticsearch为单节点模式
          - ES_JAVA_OPTS=-Xms512m -Xmx512m # 配置JVM堆内存
        volumes:
          - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 挂载配置文件
          - ./elasticsearch/data:/usr/share/elasticsearch/data # 挂载数据目录
          - ./elasticsearch/plugins:/usr/share/elasticsearch/plugins # 挂载插件目录
    
      mall4cloud-kibana:
        image: kibana:7.17.5
        container_name: mall4cloud-kibana
        restart: always
        ports:
          - 5601:5601 # 映射容器内部5601端口到宿主机的5601端口
        links:
          - mall4cloud-elasticsearch:elasticsearch # 与Elasticsearch容器建立链接
        depends_on:
          - mall4cloud-elasticsearch # 确保在启动前依赖于Elasticsearch
    
       mall4cloud-canal:
        image: canal/canal-server:v1.1.6
        container_name: mall4cloud-canal
        restart: always
        ports:
          - 11111:11111 # 映射容器内部11111端口到宿主机的11111端口
        volumes:
          - ./canal/conf/example:/home/admin/canal-server/conf/example # 挂载配置文件
          - ./canal/conf/canal.properties:/home/admin/canal-server/conf/canal.properties # 挂载配置文件
          - ./canal/logs:/home/admin/canal-server/logs # 挂载日志目录
    
      mall4cloud-rocketmq-namesrv:
        image: apache/rocketmq:4.9.4
        container_name: mall4cloud-rocketmq-namesrv
        restart: always
        ports:
          - 9876:9876 # 映射容器内部9876端口到宿主机的9876端口
        volumes:
          - ./rocketmq/namesrv/logs:/home/rocketmq/logs # 挂载日志目录
          - ./rocketmq/namesrv/store:/home/rocketmq/store # 挂载存储目录
        environment:
          JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128M" # 配置Java参数
        command: ["sh","mqnamesrv"] # 启动命令
        networks:
          rocketmq:
            aliases:
              - mall4cloud-rocketmq-namesrv
    
      mall4cloud-rocketmq-broker:
        image: apache/rocketmq:4.9.4
        container_name: mall4cloud-rocketmq-broker
        restart: always
        ports:
          - 10909:10909 # 映射容器内部10909端口到宿主机的10909端口
          - 10911:10911
        volumes:
          - ./rocketmq/broker/logs:/home/rocketmq/logs # 挂载日志目录
          - ./rocketmq/broker/store:/home/rocketmq/store # 挂载存储目录
          - ./rocketmq/broker/conf/broker.conf:/etc/rocketmq/broker.conf # 挂载配置文件
        environment:
          JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128M -XX:-AssumeMP" # 配置Java参数
        command: ["sh","mqbroker","-c","/etc/rocketmq/broker.conf","-n","mall4cloud-rocketmq-namesrv:9876","autoCreateTopicEnable=true"] # 启动命令
        depends_on:
          - mall4cloud-rocketmq-namesrv # 确保在启动前依赖于RocketMQ Namesrv
        networks:
          rocketmq:
            aliases:
              - mall4cloud-rocketmq-broker
    
      mall4cloud-rocketmq-dashboard:
        image: apacherocketmq/rocketmq-dashboard:1.0.0
        container_name: mall4cloud-rocketmq-dashboard
        restart: always
        ports:
          - 8180:8080 # 映射容器内部8080端口到宿主机的8180端口
        environment:
          JAVA_OPTS: "-Drocketmq.namesrv.addr=mall4cloud-rocketmq-namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" # 配置Java参数
        depends_on:
          - mall4cloud-rocketmq-namesrv # 确保在启动前依赖于RocketMQ Namesrv
        networks:
          rocketmq:
            aliases:
              - mall4cloud-rocketmq-console
    
    # 定义自定义网络
    networks:
      rocketmq:
        name: rocketmq
        driver: bridge
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170

    3、es的模板建立
    如果使用es-head,则使用如下命令

    http://127.0.0.1:9200/_template/product/
    使用kibana的话根据视频正常建立即可

    4、后端代码通过idea打开后没有services管理
    正常来说,启动项目后右下角会提示是否要打开services窗口,点击同意即可,如果未提示,看这篇文章的解决方法

    https://blog.csdn.net/weixin_45764765/article/details/124794766

    pom搭建

    看一下项目的父pom文件内容
    在这里插入图片描述
    ①:指定项目的gav坐标
    ②:指定项目的模块依赖,可以看到有14个模块,后面一一介绍
    ③④:项目的具体配置,可以看到使用了jdk1.8版本,这个也要和maven的conf下的seeting.xml版本保持一致,且和idea的jdk环境保持一致,下图中打开的内容。
    在这里插入图片描述
    继续看下面的配置
    在这里插入图片描述
    ①②③:springboot、springCloud、springCloudAlibaba三者的版本号,这个版本有具体的对应关系。如下图,具体版本详细对照:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
    在这里插入图片描述
    ④可以修改版本的两个依赖
    ⑤一些依赖的版本管理,中间件的版本对照也可以看这个,就不一一列举了

    https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

    继续看
    在这里插入图片描述

    ①②③:元素是用于集中管理项目中所有依赖库的版本号的部分。但不会直接引入这些依赖。也就是这部分只是做gav坐标的管理。方便后续各个模块直接引入

    在这里插入图片描述
    ①②:这里是表示这个spring-boot-configuration-processor是可选的,也是没有引入,如需引入需指定具体版本
    ③~⑥等后续:

    • :包含了 Maven 构建过程的配置信息
    • < finalName>用于指定项目构建生成的最终产物(通常是 JAR 文件、WAR 文件等)的名称
    • spring-boot-maven-plugin:将 Spring Boot 项目打包成自包含的可执行 JAR 文件,其中包含了应用程序的代码和所有依赖项
    • < plugin>:用于编译 Java 代码和处理资源文件
    • < resources>: src/main/resources在构建过程中会被过滤

    项目运行

    后台项目启动这五个是必须启动的
    在这里插入图片描述
    由上到下依次是

    • 授权登录模块
    • 业务模块
    • 网关模块
    • 基于美团leaf的生成id服务
    • 用户角色权限模块

    前端运行

    这个可以直接参考视频运行即可

  • 相关阅读:
    英语——语法——从句——名词性从句——笔记
    借助docker在本地模拟线上CI/CD流水线编译流程
    继北极星项目后,又一款低成本AR眼镜开源方案:OpenAR
    网络知识点之-MSTP平台
    【面试题】2023知乎暑期实习算法实习生(LLM方向)面经
    深度神经网络的应用,深度神经网络应用
    Ansible之 AWX 创建管理项目的一些笔记
    使用.NET简单实现一个Redis的高性能克隆版(四、五)
    IPv6简介
    强制类型转换有哪几种?
  • 原文地址:https://blog.csdn.net/qq_40454136/article/details/132813026