从0开始全栈项目-03 项目整体架构和数据库定义

架构图
在这里插入图片描述
前端服务直接部署在阿里云上
微服务划分
前端架构采用 react+antd+umi的一个技术栈
在这里插入图片描述

技术选型

采用springcloud alibab 全家桶

  1. 注册中心 : nacos
  2. 配置中心: nacos
  3. 远程调用,负载均衡,OpenFeign,ribbon
  4. 熔断降级:sentinel
  5. 网关:gateway
  6. 流量监控:sleuth + zipkin
  7. 分布式事务: seata

版本选择

springcloud-alibaba 和 springcloud 和springboot 之间是有对应关系,我在之前的文章里写过,现在就直接抄

    <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version  -->
 <dependencyManagement>
        <dependencies>
        
            <dependency>
                <groupId>com.zc.eshop</groupId>
                <artifactId>eshop-common</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>2.2.7.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

nacos

微服务之间采用nacos作为注册中心和配置中心

在common模块中引入nacos依赖
<!--        nacos-->
        <!--        服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>



        <!--        nacos-->
docker 配置nacos
docker pull nacos/nacos-server
docker run -d -p 8848:8848 --env MODE=standalone  --name nacos  nacos/nacos-server
docker update nacos --restart=always

访问 http://ip:8848/nacos 就可以看到页面了,账号密码默认 nacos nacos

文件配置

application.yml中
在这里插入图片描述
最后在启动类上添加注解 @EnableDiscoveryClient

作为配置中心

  1. 引入依赖
        <!--        配置中心来做配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  1. 增加配置 bootstrap.properties
spring.cloud.nacos.config.server-addr=192.168.10.129:8848
spring.application.name=eshop-admin
  1. 在nacos的配置列表里面添加一个 名字.properties的文件
    在这里插入图片描述
  2. 在用到文件的类上添加 @RefreshScope 注解,这样在nacos上发布的配置应用就可以不重启 生效

不同开发环境的配置

  1. 有几个微服务就创建几个命名空间,注意名字一定是要微服务名称.properties结尾,然后把微服务上的命名空间和nacos对应,并且在每个命名空间下创建不同的环境
    在这里插入图片描述
  2. 在单独的微服务上配置环境
spring.cloud.nacos.config.server-addr=192.168.10.129:8848
spring.application.name=eshop-wares
# 命名空间的id
spring.cloud.nacos.config.namespace=68c0832a-8537-446a-b39a-556d5dae4767

# 环境
spring.cloud.nacos.config.group=prod

加载多配制集

  1. 把本地配置文件分配拆分成不同的nacos配置
    在这里插入图片描述
  2. bootstrap.properties 配置文件中修改配置方式
    在这里插入图片描述

openFeign

  1. 引入依赖
      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

思考
controller 有的时候是返回给前端接口需要查询额外的信息,而微服务之间相互调用的情况可能不需要一些额外的查询,比如图片的base64资源等等。所以在controller下定义一个web和一个api的包,web里面就放专门和前端通信的接口,而api则放跟微服务之间相互调用的接口,
并且feign的调用都是通过接口的形式,不同微服务之间调用同一个微服务原本需要在自己的包下创建interface,如果接口改变了调用方也不好察觉,于是准备把feign的接口定义在common中,然后让api中的controller实现对应接口
2. @EnableFeignClients 默认是扫描当前包下的,如果微服务之间包名不一样,可能扫不到,所以直接指定

在这里插入图片描述
3. 被调用方在这里插入图片描述
4. feign本身,注意名字要和服务在nacos上注册的相同
在这里插入图片描述

网关gateway

  1. 引入依赖,并且要把spring-boot-starter-web 排除
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
  1. gateway 提供了两类现成的断言和过滤器,key直接通过配置使用
    在这里插入图片描述
  2. 配置信息查看官网 官网.
  3. 项目配置, 下面的配置表示如果访问 http:// 网关pi/admin/xxxxx ,网关匹配到前缀 /admin 就会把服务转发给 nacos上面服务名称为eshop-admin的服务,并且负载均衡,把 /admin/xxxx 路径全部带过去
spring:
  cloud:
    gateway:
      routes:
      - id: path_route
        uri: lb://eshop-admin
        predicates:
        - Path=/admin/**

后端微服务命名

网关 eshop-gateway 2001
后台管理 eshop-admin 3001
商品管理 eshop-wares 4001
仓储服务 eshop-storage 5001
优惠服务 eshop-coupon 6001
用户服务 eshop-user 7001
订单服务 eshop-order 8001
整合第三方服务 eshop-thirdparty 9001

公共模块

eshop-common
公共模块需要引入的东西

  1. mapper struct 一个很好用的类型转换的框架,可以自动生成转换impl
    需要引入这4个依赖
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>1.4.2.Final</version>
            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-jdk8</artifactId>
                <version>1.4.1.Final</version>
            </dependency>

            <!-- lombok dependencies should not end up on classpath -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
            </dependency>

            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.4.1.Final</version>
            </dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值