个人电商项目(mxcmall)的环境配置

基于uni-app的全平台电商项目实战——mix-mall深度解析 已售 {{ goods.sales }} 件props: {goods: {},},methods: { 阅读详情

3.项目环境

在这里我们使用的是 Linux 虚拟机来进行搭建这个项目,所以我们选用的是 VirtualBox 里搭建 CentOS 7 。 另外我们没有手动手打搭建 CentOS 7 , 而是采用 vagrant 帮我们自动搭建虚拟机的 Linux 环境。因为 vagrant 能为我们提供便捷,而且容易部署。

3.1.Linux 安装

3.1.1.VirtualBox 安装

  1. VirtualBox 下载地址
  2. image-20200430120508660
  3. 下载完成后,一键傻瓜式安装

3.1.2. vagrant 安装

vagrant是一个工具,用于创建和部署虚拟化开发环境的。

拿VirtualBox举例,VirtualBox会开放一个创建虚拟机的接口,Vagrant会利用这个接口创建虚拟机,并且通过Vagrant来管理,配置和自动安装虚拟机。

常见命令

命令解释
vagrant box list查看目前已有的box
vagrant box add新增加一个box
vagrant box remove删除指定box
vagrant init初始化配置vagrantfile
vagrant up启动虚拟机
vagrant sshssh登录虚拟机
vagrant suspend挂起虚拟机
vagrant reload重启虚拟机
vagrant halt关闭虚拟机
vagrant status查看虚拟机状态
vagrant destroy删除虚拟机

  1. vagrant 下载地址 :https://www.vagrantup.com/downloads.html
  2. 下载
image-20200430121229403
  1. 一键傻瓜式安装
  2. 安装完成后,需要重启电脑。 重启之后,我们可以通过命令行输入 vagrant 检验自己是否安装成功image-20200430121458201

3.1.3 安装 CentOS 7

https://app.vagrantup.com/boxes/search

  1. 我们到 vagrant 官网查看自己需要安装的镜像。
image-20200430121909861
  1. 命令行输入 vagrant init centos/7

这一步会为我们在 系统硬盘 下的当前用户下新建一个 Vagrantfile 文件

image-20200430122034757

  1. 命令行输入 vagrant up

    这一步会自动帮我们下载 CentOS 镜像, 需要等待非常漫长的一段时间。

  2. **启动 Linux 系统,命令行输入 vagrant ssh **

    经过漫长的等待,此时我们已经通过 vagrant 安装了 Linux 系统了,在安装系统时,vagrant 已经帮我们搭建好了 SSH 环境,我们通过 vagrant ssh 就可以连接上 Linux 系统了。

    image-20200430145442070

  3. 为了避免我们每次都要配置端口转发, vagrant 也有配置,为我们实现端口转发的功能

、

此时我们只需要打开 vagrantfile文件,

image-20200430122034757

然后找到这一行 ,将注释打开,然后将 private_network 的 IP 地址改为 与 VirtualBox Host-Only Network 的ip地址同一个网段 即可

image-20200430145902558

<img src=https://typora-1301918612.cos.ap-guangzhou.myqcloud.com/undefined/202005/23/111004-560724.png" alt=“image-20200430145937912” style=“zoom:67%;” />

  1. 修改成功后,重启虚拟机,然后再查询 虚拟机的IP地址

    image-20200430150258081

    此时的 IP 地址 已经式我们自己设置的 IP地址了

3.2 Docker 安装

3.2.1 Docker 是什么

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

3.2.1.1 Docker的应用场景
  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

3.2.1.2 Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

  • 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
  • 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
  • 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
  • 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

3.2.2 Docker 安装

关于 Docker 如何安装,Docker的官网已经有为我们提供说明文档

Docker 安装说明文档

需要注意的是:我们使用的vagrant 安装的Linux系统,那么我们使用的是vagrant为我们提供的 用户,而不是 root 用户。

  1. Older versions of Docker were called docker or docker-engine. If these are installed, uninstall them, along with associated dependencies.

    旧版本的Docker 叫做 docker 或者 docker-engine,如果你安装了他们,请先卸载,保持一个独立的依赖环境。

    $ sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
image-20200430152040054
  1. SET UP THE REPOSITORY

    Install the yum-utils package (which provides the yum-config-manager utility) and set up the stable repository.

    安装yum-utils, 设置稳定的存储库。

    $ sudo yum install -y yum-utils
    
    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
  2. Start Docker.

    启动 Docker 容器

    $ sudo systemctl start docker
    
  3. Docker 容器开机自启动

    $ sudo systemctl enable docker
    

3.2.3 阿里云镜像加速器

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://cubt013e.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

​ 在 Linux 中依次输入这四条命令,即可通过阿里云为我们加速下载 Docker 容器

3.3 Docker 安装MySQL

3.3.1 下载 MySQL 镜像

利用 Docker 下载镜像时非常的简单,我们只需要去到Docker Hub 的官网找到我们需要下载的镜像以及对应的版本

image-20200501135446972

然后利用在 Linux 命令行中输入 docker pull mysql:5.7 (docker pull 镜像软件名:版本号)

image-20200501140709441

通过命令 docker images 可以检查是否已经安装成功

image-20200501140825360

3.3.2 创建一个 MySQL 实例并启动

命令:

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
docker run -p 3306:3306 --restart always --name mymysql -v /etc/localtime:/etc/timezone:rw -v /etc/localtime:/etc/localtime:rw -e MYSQL_ROOT_PASSWORD=asdf@#123 -d  mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

检查是否创建实例成功,可以使用命令 docker ps

image-20200501141523985


参数说明
docker run : 创建一个 docker 实例
--name:       为创建的容器取一个名字,这个名字是自己定义容器的唯一标识
-p 3306:3306: 宿主机的3306端口映射到了虚拟机的3306端口

-v /主机文件夹: docker容器文件夹    当docker容器所创建了文件时,通过主机可以 直接的访问
-V /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mys/log:/var/log/mysgl:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/ib/mysgl/:将配置文件夹挂载到主机
-e MYSQL_ ROOT_ PASSWORD=root: 初始化root用户的密码
-d mysql:5.7 

3.3.3 修改配置文件

  1. vi /mydata/mysql/conf/my.cnf 进入 vi 编辑器
  2. 写入一下内容
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collection-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

  1. 重启 mysql

docker restart mysql

  1. mysql 在虚拟机启动时,自启动

    docker update mysql --restart=always

3.4 Docker 安装 redis

3.3.1下载redis镜像

命令:docker pull redis

redis我们直接下载最新版本的即可

image-20200501193557266

3.3.2 创建一个 redis 实例并启动

mkdir -p /mydata/redis/conf

touch /mydata/redis/conf/redis.conf

docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \
-v/mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

为了避免``/mydata/redis/conf下的conf `不存在,而被认为是一个目录,我们提前创建好文件夹

3.3.3 测试 redis 是否安装成功

命令:dockers exec -it redis redis-cli

image-20200501230605408

3.3.4 开启AOF的持久化方式保存

进入配置文件文件 vi /mydata/redis/conf/redis.conf ,输入下面内容

appendonly yes

3.3.5 redis 自启动

docker update redis --restart=always

3.5 安装 VS code

安装vs code 以及插件

image-20200501235205059

3.6 安装 Git

3.6.1 下载git

git官网 由于下载速度太慢了,建议使用下面的链接进行下载

https://npm.taobao.org/mirrors/git-for-windows/

3.6.2 配置git

配置git,进入git bash配置作者的信息

git config --global user.name "username"          //双引号下的username为自己设置

git config --global user.email "949010354@qq.com"

3.6.4 配置ssh免密登录

  1. 进入 git bash; 使用: ssh-keygen -t rsa -C "949010354@qq.com", 然后连续三次回车

image-20200502002505456

  1. 查看完整的密钥 ; 使用 cat ~/.ssh/id_rsa.pub

  2. 登录码云

    image-20200502003507504

  3. 使用 ssh-T git@gitee.com

image-20200502003754487

3.7 码云 新建仓库

  1. 新建一个仓库
image-20200502004146245
  1. 克隆项目到IDEA中
image-20200502004715065

3.8 创建项目微服务

微服务包括有 商品服务(product)、仓储服务(ware)、订单服务(order)、优惠券服务(coupon)、会员服务(member)

  1. 通过 spring initializr 进行创建微服务,每个微服务都导入 web、openfeign 场景

  2. 每一个服务都按照一定的规范:

    image-20200502010550809

    包名:  com.mxc.mxcmall
    模块名: mxcmall-member 
    

    3.最终结果

    image-20200502010814610
    <description>mxc商城-聚合服务</description>
    <packaging>pom</packaging>
    <modules>
        <module>mxcmall-member</module>
        <module>mxcmall-coupon</module>
        <module>mxcmall-order</module>
        <module>mxcmall-product</module>
        <module>mxcmall-ware</module>
    </modules>

3.9 将mxcmall 设为总项目,聚合所有子项目

  1. 修改pom.xml 文件为
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mxc.mxcmall</groupId>
    <artifactId>mxcmall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mxcmall</name>
    <description>mxc商城-聚合服务</description>
    <packaging>pom</packaging>
    <modules>
        <module>mxcmall-member</module>
        <module>mxcmall-coupon</module>
        <module>mxcmall-order</module>
        <module>mxcmall-product</module>
        <module>mxcmall-ware</module>
    </modules>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR4</spring-cloud.version>
    </properties>


</project>

  1. 添加 maven 项目

    image-20200502105553023
  2. 忽略提交到Git上的垃圾文件,例如 每个项目编译出来的 target 文件、.gitignore版本控制文件,都不需要提交到git。

那我们可以在跟项目下的 .gitignore 加入下面内容


**/mvnw
**/mvnw.cmd
**/.mvn
**/target/
.idea
**/.gitignore
  1. 将需要提交的文件纳入版本控制

    image-20200502113347397
  2. 提交代码至 码云

image-20200502143813006

3.10 数据库初始化

  1. 我们在初始化数据库时,选择每一个子项目微服务都对应有自己的一个数据库。创建数据库时,我们都以 mxcmall_pms , mxcmall_oms 的格式进行命名,pms代表 produce manager system。基字符集我们选用 utf8mb4 的字符集, 它不但能兼容 uft-8 ,还能解决一些乱码问题。

image-20200502150629622

  1. 创建各个微服务的数据库

    2.1 商品数据库

    image-20200502152234296

    2.2 库存数据库

    image-20200502152234296

    2.3 用户数据库

    image-20200502152436736

    2.4 订单数据库

    image-20200502152458257

    2.5 优惠券/营销数据库

    image-20200502152517973

3.11 快速开发搭建—后端

为了能有一个快速开发的环境,我们使用开源的项目作为我们的一个脚手架,我们不需要为自己做许多繁杂的事情。在这里我们使用码云行的一个 人人开源的项目 https://gitee.com/renrenio

暂时,我们先使用这两个项目image-20200504115016893

3.11.1 克隆项目

git clone https://gitee.com/renrenio/renren-fast.git

git clone https://gitee.com/renrenio/renren-fast-vue.git

image-20200504115216381

3.11.2 使用开源项目

  1. 将克隆的两个开源项目的.git文件夹删除,该文件夹是默认隐藏的,需要显示隐藏,然后再删除。

  2. 将renren-fast 文件夹移动到 项目的 目录下。

  3. 将renren-fast 加入到到模块中,根目录的pom.xml文件

    image-20200504120151115

  4. 创建与后台控制相关的数据库,数据库表的创建代码在 renren-fast 下的 db 文件夹中已经存在了。

  5. 修改 application-dev.yml 配置文件

image-20200504121820462

3.12 快速开发搭建—前端

  1. 前端开发少不了node.js, Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。但我们只需要关注 node.js 的 npm 功能。NPM 随同 Node JS 一起安装的包管理工具。
  2. 官网下载并安装 node.js ,并通过命令行 node -v 检查版本
  3. 配置 npm ,使用淘宝镜像 npm config set registry http://registry.npm.taobao.org/
  4. 第一次运行npm时,需要在 vs code 控制中输入 npm install
  5. 在这里可能会出现 node-sass 安装失败, 使用命令npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ 单独安装 node-sass。
  6. 然后在使用 npm run dev 就可以通过前后端进行联调操作。

image-20200504152618937

image-20200504152654803

  1. 浏览器访问 http://localhost:8001/#/login ,账号:admin, 密码:admin

3.13 快速开发—逆向工程

  1. 从 码云中克隆项目,代码生成器,git clone https://gitee.com/renrenio/renren-generator.git

  2. 删除克隆项目中的 .git 文件夹,并放在项目之下

  3. 修改 application.yml配置文件下的url地址,它可以为根据数据库自动生成实体类。

  4. 修改 generator.properites 配置文件

image-20200504154848185
  1. 启动generator项目,并访问 http://localhost/

  2. 在菜单栏左右有一个 选项为 renren-fast ,然后自动生成所有代码

  3. 将压缩包中的 main 解压到对应 微服务中的main 文件中

  4. 自动生成的代码中,有许多是还不能使用的,因为缺乏一些工具类。所以我们可以通过maven的方式进行引入。

  5. 创建一个新的module, 为mxcmall-common, 我们希望每一个公共的类和依赖都放在 mxcmall-common中,然后每一个微服务都来访问这个模块

  6. 每个微服务都依赖mxcmall-common

    
    <dependency>
                <groupId>com.mxc.mxcmall</groupId>
                <artifactId>mxcmall-common</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
    
  7. 为 mxcmall-common 中加入每个微服务需要用上的公共依赖。

    1. 导入mybatis-plus 依赖,详细 使用可以看官网文档: https://mp.baomidou.com/guide/install.html

      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.3.1.tmp</version>
      </dependency>
      
    2. 导入 lombok 依赖,它能简化我们 JavaBean的开发。

              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                  <version>1.18.12</version>
                  <scope>provided</scope>
              </dependency
      

    3.导入 httpcomponents 依赖

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.13</version>
</dependency>

  1. 导入 commons-lang 依赖

    		<dependency>
    			<groupId>commons-lang</groupId>
    			<artifactId>commons-lang</artifactId>
    			<version>2.6</version>
    		</dependency>
    
  2. 导入 servlet 相关的依赖

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

  1. 从 renren-fast 中复制需要导入的公共类到mxcmall-common 中。
  2. 修改 renren-generator 中的 template 模板的 controller ,将 @RequiresPermissions 注释,因为我们暂时不需要用到权限管理。
  3. 重新自动生成代码,并导入到项目中。

3.14 快速开发— crud 使用测试

  1. 导入 mybatis-plus 相关的依赖

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.3.1.tmp</version>
            </dependency>
    
  2. 配置数据源,导入数据库驱动的相关依赖

image-20200504170057410

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>

  1. 配置数据源,推荐使用 application.yml 文件

    spring:
      datasource:
        username: root
        password: root
        url: jdbc:mysql://192.168.56.10:3306/mxcmall_pms
        driver-class-name: com.mysql.cj.jdbc.Driver
    
  2. 配置 Mybatis-plus

    1. 扫描dao包: 在主项目下加注释: @MapperScan("com.mxc.mxcmall.product.dao")
    2. 告诉mybatis-plus, sql 的映射文件的具体位置

3.15 分布式组件简介:

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

3.15.1 主要功能

  • 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
  • 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

3.15.2 组件

Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。

Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。

Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。

Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。

Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

3.15.3 如何引入依赖

如果需要使用已发布的版本,在 dependencyManagement 中添加如下配置。

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

然后在 dependencies 中添加自己所需使用的依赖即可使用。

3.15.4 版本规范:

项目的版本号格式为 x.x.x 的形式,其中 x 的数值类型为数字,从 0 开始取值,且不限于 0~9 这个范围。项目处于孵化器阶段时,第一位版本号固定使用 0,即版本号为 0.x.x 的格式。

由于 Spring Boot 1 和 Spring Boot 2 在 Actuator 模块的接口和注解有很大的变更,且 spring-cloud-commons 从 1.x.x 版本升级到 2.0.0 版本也有较大的变更,因此我们采取跟 SpringBoot 版本号一致的版本:

  • 1.5.x 版本适用于 Spring Boot 1.5.x
  • 2.0.x 版本适用于 Spring Boot 2.0.x
  • 2.1.x 版本适用于 Spring Boot 2.1.x
  • 2.2.x 版本适用于 Spring Boot 2.2.x

3.15.5 我们的分布式组件选择:

  • 结合Spring Cloud Alibaba ,我们最终的技术搭配方案:
    • SpringCloud Alibaba - Nacos: 注册中心(服务发现/注册)
    • SpringCloud Alibaba - Nacos: 配置中心(动态配置管理)
    • Spring Cloud - Ribbon : 负载均衡
    • Spring Cloud - Feign :声明式HTTP客户端(调用远程服务)
    • Spring Cloud Alibaba - Sentinel:服务容错(限流、降级、熔断)
    • Spring Cloud - Gateway: API网关(webflux编程模式)
    • Spring Cloud - Sleuth: 调用链监控
    • Spring Cloud Alibaba - Seata: 原 Fescar, 即分布式事务解决方案

3.16 Nacos 作为注册中心

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  1. 下载 nacos-server :https://github.com/alibaba/nacos/releases
  2. 修改 pom.xml 文件,引入 Nacos Discovery Starter 依赖。
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>
  1. 在应用的 /src/main/resources/application.properties 配置文件中配置 Nacos Server 地址

     spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
  2. 在主项目类中 使用 @EnableDiscoveryClient 注解开启服务注册与发现功能

  3. 启动 nacos-server 服务器,并在浏览器 中访问 127.0.0.1:8848/nacos/, 进入到登录页面,默认的账号密码是nacos。

  4. 此时还没有服务注册进来,需要自己添加需要注册的微服务

image-20200504223026012

  1. 在配置文件中,为每一个微服务去上一个别名:

    spring.application.name=mxcmall-coupon
    
  2. 此时在回到可视化页面,我们可以看到已经有服务了,其中如果 服务在运行状态时,触发保护阈值为true,否则为false。

image-20200504223453911

  1. 相同的的步骤,重复其他微服务。

3.17 OpenFeign 远程调用测试

  1. OpenFeign是一种基于接口得编程方式,开发者只需要声明接口和配置注解,在调用接口方法时,Spring Cloud 就根据配置来调度对应的 REST 风格的请求,从其他微服务中获取数据。

  2. 使用OpenFeign 时,首先需要在产品微服务中导入 Maven 依赖

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    
  3. 引入open-feign

  4. 编写一个接口,告诉 spring cloud 这个接口需要调用远程服务,声明接口的方法对应某个远程服务的。

    例如:下面是mxcmall-member 微服务中的一个接口,它使用了@FeignClient() 注释,当启动 Spring Boot 的启动文件时,就会扫描 包含 @FeignClient() 注解的接口。当我们调用 CouponFeignService() 这个方法时,Spring Cloud 就会帮我们到 “mxcmall-coupon” 这个微服务中,发送 “coupon/coupon/member/list” 请求。将返回值返回给这个方法。

@FeignClient("mxcmall-coupon")
public interface CouponFeignService {
    @GetMapping("coupon/coupon/member/list")
    public R memberCoupons();

}
  1. 为了启动 feign ,需要在Spring Boot 的启动文件中加入注解 @EnableFeignClient, 这个注解代表该项目会启动 Feign 客户端。启动文件如下所示:
@MapperScan("com.mxc.mxcmall.member.dao")
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.mxc.mxcmall.member.feign")
@SpringBootApplication
public class MxcmallMemberApplication {

    public static void main(String[] args) {
        SpringApplication.run(MxcmallMemberApplication.class, args);
    }

}

  1. 两个测试方法如下

    1. mxcmall-member 微服务中的控制类
    @RestController
    @RequestMapping("member/member")
    public class MemberController {
        @Autowired
        private MemberService memberService;
    
        @Autowired
        CouponFeignService couponFeignService;
    
        @GetMapping("/coupons")
        public R test(){
            MemberEntity memberEntity = new MemberEntity();
            memberEntity.setNickname("张三");
            R memberCoupons = couponFeignService.memberCoupons();
    
            return R.ok().put("member",memberEntity).put("coupons",memberCoupons.get("coupons"));
        }
    
    1. mxcmall-coupon 微服务中的一个控制类
    @RestController
    @RequestMapping("coupon/coupon")
    public class CouponController {
        @GetMapping("/member/list")
        public R memberCoupons(){
            CouponEntity couponEntity = new CouponEntity();
            couponEntity.setCouponName("满100-10元");
            return R.ok().put("coupon",Arrays.asList(couponEntity));
        }
    }
    
    1. 当我们发送请求 http://localhost:8000/member/member/coupons时,服务器向我们响应的数据为

    image-20200505233136116

    1. 当我们在会员微服务中,调用 查询优惠券 的方法时,那么就应该要调用 优惠券微服务的数据库, 而会员微服务不存在该数据库,所以需要 feign 帮我们实现远程调用。

3.18 Nacos 作为配置中心

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  1. 首先,修改 pom.xml 文件,引入 Nacos Config Starter。
 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 </dependency>
  1. 在应用的 /src/main/resources/bootstrap.properties 配置文件中配置 Nacos Config 元数据,这是 Spring boot 中规定的,如果配置文件中有 bootstrap.properties ,它会优先与 application.properties 被读取。
 spring.application.name=nacos-config-example
 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  1. 编写一个测试类
@
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {

    @Value("${conpon.user.name}")
    private String username;
    @Value("${conpon.user.age}")
    private String age;

    @GetMapping("test")
    public R test(){
        return R.ok().put("name",username).put("age",age);
    }
}

编写一个配置文件

conpon.user.name=zhangsan
conpon.user.age=18

4.发送请求 http://localhost:7000/coupon/coupon/test

image-20200506000141568

  1. 当我们修改配置文件时,无法动态的修改请求时返回的值,我们都必须重新打包,然后再上线服务.这种操作会很麻烦,所以需要用到微服务中的配置中心,它能够帮我们实现实时的更新数据.

  2. 发送请求 http://127.0.0.1:8848/nacos , 在配置列表中添加一个新的配置

  3. 将配置文件中的信息都搬迁到这个配置中,并发布. 需要注意的时,Data ID 为 微服务名.properties,这是一个默认规则,否则该配置文件会不生效

    image-20200506001906834

  4. 在控制类中 标上注解 @RefreshScope , 动态获取,并刷新配置.

  5. @value("${…}") 获取配置中的值,如果配置中心和配置文件中都配置了相同的项,那么优先使用配置中心的值.

全面解析基于SpringBoot的电商系统 mall项目 本文还有配套的精品资源,点击获取 简介:本文详细介绍了“mall项目”,一套利用Java技术和SpringBoot框架构建的电商系统。项目深入探讨了其架构设计、核心功能和应用价值。重点讲解了SpringBoot在提高开发效率、简化配置、实现微服务方面的优势。核心功能涵盖用户管理、商品管理、订单处理、支付系统和库存控制等模块,确保了电商活动的顺畅运行。技术实现方面,使用了My... 阅读详情

相关推荐

mix-mall 电商项目模版.rar

一个基于uni-app开发的电商项目模板,里面交互都搞定了,大家使用的话,直接替换接口就行,不足之处欢迎大家指出

探索高效电商构建之道 —— uniapp 强力驱动的 mix-mall 项目模板

探索高效电商构建之道 —— uniapp 强力驱动的 mix-mall 项目模板 去发现同类优质开源项目:https://gitcode.com/ 随着移动互联网的发展,电商平台的需求日益增长,而快速搭建一个具备全渠道覆盖能力的电商应用成为了许多开发者和企业的共同目标。今天,我们要推荐的是一款基于广受好评的uniapp框架的电商项目模板——mix-mall,它无疑是一键启动你的电商梦想的钥匙。 项...

gitblog_09818的博客 885

电商网站模板(44套)

电商网站模板(44套)

推荐一个Star74.5k的电商系统项目

企业管理人员可以通过后台系统对商品进行上下架、价格调整、库存管理,对订单进行处理和跟踪,对会员进行管理和维护,制定促销策略,进行内容发布和运营活动安排,并查看销售数据和财务报表。最近不少兄弟正在面试,过来咨询 V 哥关于项目经验的问题,记得上周给大家分享了一篇《教你如何回答技术面试问题才完美》的文章,其中文章中最核心的问题,就是在简历中如何体现你的项目经历,我再强调一下,如何你的简历中的项目经验与招聘企业的业务匹配度越高,那么你收到面试邀请的机会肯定是更大。所以,你懂的,需要随机应变。

威哥爱编程,华为 HDE,鸿蒙极客、优快云博客专家、《鸿蒙 HarmonyOS 5/6 开发之路》系列图书第一作者 648

mix-mall.rar

uni-app电商项目,

Mall+ 购物中心O2O电商平台——手机商城

Mall+购物中心O2O移动电商解决方案 ,它包含了APP商城、电子会员卡、数据分析系统、扫码支付、交易采集、积分等。

探索高效电商开发:uniapp 电商项目模版--mix-mall

探索高效电商开发:uniapp 电商项目模版--mix-mall 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今快速发展的电商行业中,如何快速搭建一个功能齐全、易于扩展的电商平台是许多开发者的迫切需求。uniapp 电商项目模版--mix-mall 正是为此而生。这个基于 uniapp 框架开发的电商项目模版,不仅提供了完整的电商功能模块,还支持多端运行,极大地...

gitblog_09711的博客 877

电商项目模版-mix-mall.zip

电商项目模版-mix-mall

推荐一个基于SpringBoot的全栈电商系统,前台商城项目+后台管理系统(附源码)

一个基于SpringBoot + Vue + uni-app的全栈电商系统,以其丰富的功能和现代化的技术架构,为电商领域带来了创新的解-决方案。

m0_68103666的博客 1097

uniapp 电商项目模版--mix-mall.zip

uniapp 电商项目模版--mix-mall

具有I2S输出的多模数字麦克风ICS-43434咪头LR引脚接地或电源WS接LRCLK

ICS-43434 是一款数字 IS 输出底部收音孔麦克风。完整的 ICS-43434 解决方案包括 MEMS 传感器、信号调理、模数转换器、抽取和抗混叠滤波器、电源管理以及行业标准的 24 位 12S 接口。12S 接口允许 ICS-43434 直接连接到数字处理器,例如 DSP 和微控制器,而无需系统中的音频编解码器。

易板 5664

Uniapp 项目模板链接

uni-app项目模板 uni-app博客:uni-app 页面 路由navigate - 你还喜欢现在吗? - 博客园 mix-mall 电商项目模版:https://ext.dcloud.net.cn/plugin?id=200 插件市场,模板市场: https://ext.dcloud.net.cn/plugin?id=239 https://ext.dcloud.net.cn/ 5年web前端的uni-app快速开发项目架构 https://ext.dcloud.net.cn/

qq_50909707的博客 1189

OpenCV和Halcon分别实现彩色图像的白平衡效果

实现白平衡算法中的灰度世界法,能有效改善图像发红/发蓝/发绿的现象 1、OpenCV #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat g_srcImage,dstImage; vector<Mat> g_vChannels; g_srcImage = im...

$firecat利白的代码足迹$ 2829

【亲测免费】 uniapp 电商项目模版--mix-mall

uniapp 电商项目模版--mix-mall 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 本仓库提供了一个名为 uniapp 电商项目模版--mix-mall.zip 的资源文件下载。该资源文件是一个基于 uniapp 框架开发的电商项目模版,命名为 mix-mall。 项目特点 跨平台支持:基于 uniapp 框架开发,支持多端运行,包括 H5、小程序、App...

gitblog_09803的博客 508

【博客汇总】UV打印机博客汇总

UV平板机博客汇总

Print World的专栏 1743

别再对着数据手册画图了!用HFSS 2023 R2快速复现ESP-01的PCB天线(附模型文件)

本文详细介绍了使用HFSS 2023 R2逆向复现ESP-01 PCB天线的五个关键步骤,包括逆向工程准备、高效建模技巧、材料与边界设置、激励与求解配置以及结果分析与设计验证。通过参数化建模和智能边界检测,大幅提升仿真效率,适用于WIFI和蓝牙设备的射频设计优化。

weixin_30832143的博客 76

springboot+vue+eladmin+uniapp学习商城项目

1 app代码链接:https://gitee.com/chen-kang-space/ck-uni-ui.git 后台管理代码链接:https://gitee.com/chen-kang-space/eladmin-web-master.git 前端代码链接:https://gitee.com/chen-kang-space/ck-uni-ui.git 使用框架 eladmin:https://el-admin.vip/ uniapp:https://uniapp.dcloud.io/ mix-mall

kanglaoye的博客 654

闲人闲谈PS之十二——WBS-BOM在装备制造项目中的实战解析

本文深入解析了WBS-BOM在装备制造项目中的核心应用。针对按订单设计/生产的行业痛点,WBS-BOM作为项目专属物料清单,完美连接SAP PS与PP模块,确保MRP能基于项目进行精准物料需求计算,实现从设计到生产的全链路项目化跟踪与管理。

weixin_29284885的博客 399

uni-app优秀插件

组件库 ThorUI ColorUI UI界面和组件 轮播图系列 高级轮播图 精致的图片展示组件,自定义面板指示点,可配置性强 大小图轮播,类似手机相册 图片轮播,商品详情图 QSwiper组件 切换动画很强大 一款由自定义元素组成的有过渡动画及背景渐变的swiper、引导页,切分为元素解决了小程序占内存大问题 画廊(ynGallery)组件 类似轮播但不是 通用画廊(ynGallery)组件 流畅的滑动感 类似于猫眼影廊 体验感不错 带缩放的轮播 轮播不能用于H5 uni.createAnimat

Liuyilllin的博客 7731

DeepSeek 赋能智慧消防:以 AI 之力筑牢城市安全 “防火墙”

在数字化浪潮下,智慧消防系统亟需先进技术提升效能。DeepSeek 凭借 Transformer 架构与混合专家架构等核心技术,具备强大的多模态数据处理与智能决策能力,且支持本地化部署,保障数据安全。其在智慧消防领域的应用成效显著,从实现火灾风险动态感知与早期精准预警,到优化智能接警调度、设备健康管理,再到辅助应急指挥与疏散,有效降低火灾风险与事故损失。未来,DeepSeek 有望在智慧消防领域持续拓展,同时也需应对技术、数据等多方面挑战。

邓邓子的博客 1690

HBV模型

据说mHM模型也是基于HBV模型原理。 网上不同版本的HBV模型稍有差别 def hbv_main(n_days, params, air_temp, prec, dpem): #n_days 模拟天数 #air_temp 每月温度 #prec 降水 #dpem 每月蒸发 Tsnow_thresh = 0.0 ca = 410. # Initialize arrays for the simiulation snow = np.zeros(air_temp.size

m0_46268055的博客 2331

uniapp学习总结

uni-app学习总结

smileKH的博客 591

YOLOv11改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下:详细内容参考:YOLOv11原始模型结构介绍 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检

Limiiiing的博客 8801

探索电商新纪元:mall开源项目全面解析

探索电商新纪元:mall开源项目全面解析 【免费下载链接】mall mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管...

gitblog_01197的博客 1271

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

uniapp好用项目和插件总结

前言: 1.我是一个后端人员,很久没有碰过任何前端东西,所以总结出一些能用上的别人的轮子,方便提高自己的学习和开发效率 2.本文收集来源是Uniapp官方的插件市场和github 3.本文收集的内容是评分高的和一些评价不错的,以目录链接带截图的形式呈现,当然我没总结进来的不代表不好 4.本文会持续更新,因为数目太多和个人理解不到位,可能会出现某些分类不严谨和错误,请见谅!也欢迎给出建议和评论 5....

Gang-bb的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: Spring Boot 错误页面解析原理(超级无敌详细)
下一篇: JVM的整体结构和生命周期
Dim_Jerry
博客等级 码龄8年 14粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值