云课堂项目搭建

该文章详细介绍了某在线教育平台的项目架构,包括管理功能、用户中心、认证中心、文件管理、课程中心、媒体数据处理、消息系统、订单与支付、课程秒杀等关键模块。项目采用前后端分离,前端使用Vue.js,后端使用SpringBoot和SpringCloud微服务架构,配合Nacos进行服务发现和配置管理,实现高可用和可扩展性。
摘要由CSDN通过智能技术生成

一.项目基本介绍

1.功能架构:平台主要业务如下

功能解释

1.管理功能:组织机构管理,角色管理,权限管理,数据字典,系统设置,后台登录。

2.用户中心:VIP购买,个人中心,实名认证,资料完善。

3.认证中心:统一认证授权中心,前后台用户统一登录。

4.文件管理: 分布式文件管理中心,基于OSS对象存储。

5.课程中心:讲师管理,课程管理,文件上传,课程发布,课程下架。

6.媒体数据:视频分片上传,云服务器推流,视频云点播。

7.消息系统:短信消息,邮件发送,站内信,系统消息,广告消息。

8.订单中心:VIP购买下单,课程购买下单,账户充值下单。

9.支付系统:支付宝支付,微信支付

10.课程秒杀:秒杀课程发布,课程秒杀

2.应用划分

项目分为:管理端,门户端,移动端

二.项目架构设计

1.应用架构

项目采用主流的前后端分离模式,前端分为:系统管理前端,门户前端

2.技术栈

1.系统管理前端:Node.js,Vue.js,Npm,WebPack,Vue Cli ,Element UI ,Easy Mock等等。

2.门户网站前端:Html ,css,js ,jquery等等。

3.后端采用微服务架构:按照功能拆分N多个服务,每个服务可以独立技术选型,独立开发,独立部署,独立运维.,单个服务使用基于ssm的springboot,服务间通过spring cloud协调.技术包括:

  • SpringCloud/Alibaba(Eureka/Nacos,Zuul/Gateway,Config/Nacos,Feign,Hystrix/Sentinel,Seluth,Zipkin) + MyBatisPlus + SpringBoot + SpringMVC + Velocity

  • 数据存储:Mysql + Redis + Alicoud OSS + ElasticSearch +RocketMQ

  • 运维方面:阿里云服务器,Docker,Jenkins,K8S等等

  • 日志收集:Logstash + ElasticSearch + Kibana [二期]

  • 监控报警:Metrics + Prometheus + Grafana +Aalertmanager [二期]

3.项目架构

项目架构图

架构说明

  • 负载层 : Nginx+lvs

  • 网关 : Spring Cloud Gateway

  • 服务通信 : OpenFeign

  • 服务熔断&降级&限流 :Sentinel

  • 服务发现&配置管理:Nacos

  • 链路追踪 : Zipkin+Seluth

  • 认证授权:Security+Oauth2+JWT

  • 日志收集: ELK

  • 分布式缓存:Redis

  • 消息队列:RocketMQ

  • 全文搜索:ElasticSearch

  • CI/DI :jenkins+docker+k8s

 三.项目架构搭建

1.项目规划

1.1.服务划分

后端服务

服务名端口备注
ymcc-service-gateway10010服务网关
ymcc-service-system10020管理中心
ymcc-service-user10030用户中心
ymcc-service-uaa10040认证授权
ymcc-service-course10050课程中心
ymcc-service-file10060媒体数据
ymcc-service-media10070文件管理
ymcc-service-search10080搜索服务
ymcc-service-message10090消息服务
ymcc-service-order10100订单中心
ymcc-service-pay10110支付中心
ymcc-service-kill10120秒杀服务

 前端服务

服务名端口备注
ymcc-ui-system6001系统管理前端
ymcc-ui-course6002门户课程站点
ymcc-ui-user6003门户用户站点
1.2.项目结构

 

【特别注意】项目搭建完成之后做如下检查

  • 项目采用pom父子模块进行构建,在一级pom中管理springboot和springcloud依赖以及公共依赖

  • 二级不做pom管理,不导入任何依赖

  • 三级导入项目本身需要的依赖

  • 一级和二级的pom的packaging应该是pom,三级的packaging应该是jar

2.Cloud基础服务

2.1.父项目

父项目负责聚合子项目,以及管理依赖,具体pom如下

<!--打包方式:pom,代表这个项目只是做pom管理,不写代码-->
<packaging>pom</packaging>
<!--公共的一些配置-->
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <ymcc.version>1.0-SNAPSHOT</ymcc.version>
</properties>

<!--SpringBoot-->
<parent>
    <groupId> org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
</parent>

<!--SpringCloud-->
<dependencyManagement>
    <dependencies>
        <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>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>



<!--公共的依赖-->
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.50</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
</dependencies>

2.2.网关(gateway)搭建

1.导入依赖(gateway网关、nacos-discovery服务发现、nacos-config配置管理)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud </groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.启动类

增加:@EnableDiscoveryClient 注册到Nacos

3.yml配置

server:
  port: 11000
spring:
  application:
    name: service-user #服务名
  cloud: #注册到Nacos
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      discovery:
        locator:
          enabled: false #开放服务名访问方式
          lower-case-service-id: true #服务名小写
      routes: #路由配置
        - id : application-user #指定服务名
          uri: lb://service-user #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/user/**	#服务访问路径
          filters:
            - StripPrefix=2	
        - id: application-uaa #指定服务名
          uri: lb://service-uaa #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/uaa/**    #服务访问路径
          filters:
            - StripPrefix=2
        - id: application-course #指定服务名
          uri: lb://service-course #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/course/**    #服务访问路径
          filters:
            - StripPrefix=2
        - id: application-system #指定服务名
          uri: lb://service-system #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/system/**    #服务访问路径
          filters:
            - StripPrefix=2
        - id: application-search #指定服务名
          uri: lb://service-search #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/search/**    #服务访问路径
          filters:
            - StripPrefix=2
        - id: application-pay #指定服务名
          uri: lb://service-pay #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/pay/**    #服务访问路径
          filters:
            - StripPrefix=2
        - id: application-order #指定服务名
          uri: lb://service-order #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/order/**    #服务访问路径
          filters:
            - StripPrefix=2
        - id: application-media #指定服务名
          uri: lb://service-media #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/media/**    #服务访问路径
          filters:
            - StripPrefix=2
        - id: application-kill #指定服务名
          uri: lb://service-kill #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/kill/**    #服务访问路径
          filters:
            - StripPrefix=2
        - id: application-common #指定服务名
          uri: lb://service-common #去注册中心找这个服务名
          predicates:    #断言,匹配访问的路径
            - Path=/ymcc/common/**    #服务访问路径
          filters:
            - StripPrefix=2
      globalcors: #跨域配置
        cors-configurations:
          '[/**]':
            allowedOrigins: "*"
            allow-credentials: true
            allowed-headers: "*"
            allowedMethods:
              - GET
              - POST
              - DELETE
              - PUT
              - PATCH
              - OPTIONS
              - HEAD
              - CONNECT
              - TRACE
  #允许Bean覆盖
  main:
    allow-bean-definition-overriding: true

2.4.Nacos配置中心

1.Nacos控制台创建配置文件

2.创建bootstrap.yml

spring:
  main:
    allow-bean-definition-overriding: true
  profiles:
    active: dev
  application:
    name: service-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #注册中心
      config:
        server-addr: localhost:8848 #配置中心
        file-extension: yaml #配置文件格式
        prefix: application-gateway #配置前缀 ,默认使用sring.application.name
        group: DEFAULT_GROUP

2.5.基础模块

创建基础模块ymcc-basic-common,拷贝BaseQuery,JSONResult,PageLis 到模块中

3.系统管理中心搭建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值