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

news2024/11/17 21:43:39

环境部署,构建与运行

  • mall4cloud项目介绍
    • 源码地址
  • 开发环境搭建
  • pom搭建
  • 项目运行
  • 前端运行

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
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

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是可选的,也是没有引入,如需引入需指定具体版本
③~⑥等后续:

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

项目运行

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

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

前端运行

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis的基本概念与基础用法(1)

在节假日前12306的访问量就会急剧增加&#xff0c;在这种海量用户高并发的情况下就容易出现网站崩溃的情况&#xff0c;造成网站奔溃的罪魁祸首就是关系型数据库&#xff0c;因为关系型数据库有&#xff1a; 性能瓶颈&#xff1a;磁盘IO性能低下扩展瓶颈&#xff1a;数据关系复…

【三维重建】Ubuntu18.04安装COLMAP

Ubuntu18.04安装COLMAP 文章目录 Ubuntu18.04安装COLMAP前言安装COLMAP&#xff1a;安装CUDA, cuDNN安装依赖项安装Ceres优化库安装glog(可选)配置并编译COLMAP运行COLMAP 总结 前言 COLMAP是一种通用的运动结构(SfM)和多视图立体(MVS)管道&#xff0c;具有图形和命令行界面。…

RBTree(红黑树)模拟实现(插入)

目录 红黑树的性质 红黑树的模拟插入 叔叔存在且为红色 叔叔不存在 旋转情况​​​​​​​ 叔叔存在且为黑色 总结 插入实现 节点 插入逻辑 左单旋 右单旋 红黑树是一颗平衡搜索二叉树&#xff0c;但是红黑树并不像 AVL 树一样是高度平衡二叉树&#xff0c;任意一…

正在吞食世界的Python!

谁能想到&#xff0c;30年后&#xff0c;一条蟒蛇因为人工智能而席卷了全世界&#xff01;这一切&#xff0c;都源于1989年的那个圣诞节。 一个名叫Guido van Rossum程序员在荷兰的阿姆斯特丹呆着&#xff0c;无所事事的圣诞假期有点无聊。为了打发时间&#xff0c;他开发了一…

前端中的事件委托

前端小知识 事 件 委 托 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/132819265 【介绍】&#xff1…

MATLAB语言 实验一 MATLAB工作环境熟悉及简单命令的执行

一、 实验名称 MATLAB工作环境熟悉及简单命令的执行 二、 实验目的 熟悉MATLAB的工作环境&#xff0c;学会使用MATLAB进行一些简单的运算。 三、实验内容 MATLAB的启动和退出&#xff0c;熟悉MATLAB的桌面&#xff08;Desktop&#xff09;&#xff0c;包括菜单&#xff08…

抖音视频批量智能剪辑/智能一键成片功能如何技术开发源头?

抖音seo&#xff0c;视频剪辑&#xff0c;批量发布&#xff0c;账号矩阵管理&#xff0c;无人直播自动询盘锁定客户&#xff0c;想实现以上功能都要有正规的接口权限&#xff0c;这个权限接口已经在前面文章发过。 一、剪辑技术开发 智能剪辑&#xff1a;咱们研发公司自主研发…

初识Vue3

目录 创建实例 Vue3生命周期 响应式基础 为什么要使用 ref&#xff1f; 声明响应式状态 ref()和reactive() toRef()和toRefs() 创建实例 通过对Vue2的学习&#xff0c;我们可以这样在Vue2中创建一个实例&#xff1a; var vm new Vue({// 选项 }) 或者通过Vue全局api…

webrtc-m79-测试peerconnectionserver的webclient-p2p-demo

1 背景 webrtc的代码中有peerconnectionclient和peerconnectionserver的例子&#xff0c;但是没有对应的web端的例子&#xff0c;这里简单的写了一个测试例子&#xff0c;具体如下&#xff1a; 2 具体操作 2.1 操作流程 2.2 测试效果 使用webclient与peerconnectionclient的…

Windows安装MySQL8.0完整教程

很多朋友在安装MySQL的时候&#xff0c;总会遇到各种各样的问题。本文来教你怎样正确安装MySQL。 一、 下载MySQL 如果已经下载好了可以忽略&#xff0c;我下面提供两个版本的下载链接 阿里云盘 夸克云盘 链接&#xff1a;https://pan.quark.cn/s/1894623c2e6a 提取码&…

Go入门教程

什么是Go语言&#xff1f; Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近&#xff0c;但功能上有&#xff1a;内存安全&#xff0c;GC&#xff08;垃圾回…

BGP感想

BGP 边界网关协议 属于外部或域间路由协议&#xff0c;距离矢量路由协议。 AS(自治系统)&#xff0c;在一个自治系统内运行osfp,is-is,rip,vlan等,实现AS内网络互通。 BGP做什么&#xff0c;为处于不同自治系统&#xff08;AS&#xff09;中的路由器之间进行“路由信息通信…

视频推流测试——使用ffmpeg进行推流生成rtsp视频流

在我们完成开发工作之后,需要通过推流的形式来验证能否正确接收视频流,并送入视频检测程序。笔者在这里使用的是业内最为常用的ffmpeg。具体方法如下。 1、安装ffmpeg 访问ffmpeg的官网,地址为https://ffmpeg.org/download.html,按照如下途中来选择下载。 下载完成后,会…

LeetCode(力扣)53. 最大子数组和Python

LeetCode53. 最大子数组和 题目链接代码 题目链接 https://leetcode.cn/problems/maximum-subarray/ 代码 class Solution:def maxSubArray(self, nums: List[int]) -> int:result float(-inf)count 0for i in range(len(nums)):count nums[i]if count > result:res…

华为云云耀云服务器L实例评测|华为云云耀云服务器docker部署srs并调优,可使用webrtc与rtmp

华为云云耀云服务器L实例评测&#xff5c;华为云云耀云服务器docker部署srs并调优&#xff0c;可使用webrtc与rtmp 什么是华为云云耀云L实例 云耀云服务器L实例&#xff0c;面向初创企业和开发者打造的全新轻量应用云服务器。提供丰富严选的应用镜像&#xff0c;实现应用一键…

BUUCTF Reverse/[2019红帽杯]childRE

查看信息 分析代码 int __cdecl main(int argc, const char **argv, const char **envp) {__int64 v3; // rax_QWORD *v4; // raxconst CHAR *v5; // r11__int64 v6; // r10int v7; // er9const CHAR *v8; // r10__int64 v9; // rcx__int64 v10; // raxunsigned int v12; // ec…

基于人工智能与边缘计算Aidlux的工业表面缺陷检测

一&#xff1a;训练yolov8得到onnx模型&#xff08;相关教程有很多&#xff09; 二&#xff1a;模型转化&#xff1a; 网站&#xff1a; https://aimo.aidlux.com/ 输入试用账号和密码: 账号:AIMOTC001&#xff0c;密码:AIMOTC001 我们选择 TensorFlowLite 一步步完成转化 …

自然语言处理应用(二):自然语言推断

自然语言推断 自然语言推断&#xff08;Natural Language Inference&#xff09;是指通过对自然语言文本进行逻辑推理和推断&#xff0c;判断两个句子之间的关系&#xff0c;通常包括三种关系&#xff1a;蕴含&#xff08;entailment&#xff09;、矛盾&#xff08;contradict…

Java通过http请求的方式调用他人的接口

本功能的实现&#xff0c;去不参数于这篇博客&#xff0c;给这位大神点赞 基于Spring Boot使用Java调用http请求的6种方式 文章目录 业务背景第一步&#xff0c;配置url第二步&#xff0c;封装请求体&#xff0c;RequestBody第三步&#xff0c;使用HttpURLConnection调用服务…

机器学习(8)---数据预处理

文章目录 一、数据预处理1.1 数据无量纲化1.2 数据归一化1.3 数据标准化1.4 处理选择 二、缺失值2.1 填补的类和参数2.2 用Pandas和Numpy进行填补 三、处理分类型特征&#xff1a;编码与哑变量3.1 编码3.2 哑变量&#xff08;独热编码&#xff09; 一、数据预处理 1.1 数据无量…