没有自己的境外网站怎么做谷歌推广,最好看免费观看高清大全新员工,开发公司购买除财务软件外的软件计什么科目,一个公司能备案几个网站文章目录 媒资管理模块1 模块需求分析1.1 模块介绍1.2 业务流程1.2.1 上传图片1.2.2 上传视频1.2.3 处理视频1.2.4 审核媒资 2.2 搭建Nacos2.2.1 服务发现中心2.2.2 配置中心2.2.2.1 配置三要素2.2.2.3配置content-api 2.2.3 公用配置2.2.4 配置优先级2.2.5 导入配置文件2.2.6 … 文章目录 媒资管理模块1 模块需求分析1.1 模块介绍1.2 业务流程1.2.1 上传图片1.2.2 上传视频1.2.3 处理视频1.2.4 审核媒资 2.2 搭建Nacos2.2.1 服务发现中心2.2.2 配置中心2.2.2.1 配置三要素2.2.2.3配置content-api 2.2.3 公用配置2.2.4 配置优先级2.2.5 导入配置文件2.2.6 作业 2.3 搭建Gateway2.4 搭建媒资工程 媒资管理模块
1 模块需求分析
1.1 模块介绍
媒资管理系统是每个在线教育平台所必须具备的查阅百度百科对它的定义如下 媒体资源管理(Media Asset ManagementMAM)系统是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容(如视/音频资料、文本文件、图表等)进行数字化存储、管理以及应用的总体解决方案包括数字媒体的采集、编目、管理、传输和编码转换等所有环节。其主要是满足媒体资源拥有者收集、保存、查找、编辑、发布各种信息的要求为媒体资源的使用者提供访问内容的便捷方法实现对媒体资源的高效管理大幅度提高媒体资源的价值。 每个教学机构都可以在媒资系统管理自己的教学资源包括视频、教案等文件。 目前媒资管理的主要管理对象是视频、图片、文档等包括媒资文件的查询、文件上传、视频处理等。 媒资查询教学机构查询自己所拥有的媒资信息。 文件上传包括上传图片、上传文档、上传视频。 视频处理视频上传成功系统自动对视频进行编码处理。 文件删除教学机构删除自己上传的媒资文件。
1.2 业务流程
1.2.1 上传图片
教学机构人员在课程信息编辑页面上传课程图片课程图片统一记录在媒资管理系统。 下图是上传图片的界面
1.2.2 上传视频
1、教学机构人员进入媒资管理列表查询自己上传的媒资文件。 点击“媒资管理” 进入媒资管理列表页面查询本机构上传的媒资文件。
2、教育机构用户在媒资管理页面中点击 “上传视频” 按钮。 点击“上传视频”打开上传页面
3、选择要上传的文件自动执行文件上传视频上传成功会自动处理。
1.2.3 处理视频
对需要转码处理的视频系统会自动对其处理处理后生成视频的URL。 处理视频没有用户界面完全是后台自动执行。
1.2.4 审核媒资
审核媒资包括程序自动审核和人工审核程序可以通过鉴黄接口(https://www.aliyun.com/product/lvwang?spm5176.19720258.J_3207526240.51.e93976f4rSq796)审核视频对有异议的视频由人工进行审核。 1.运营用户登入运营平台并进入媒资管理页面查找待审核媒资 2.点击列表中媒资名称链接可预览该媒资若是视频则播放视频。
3.点击列表中某媒资后的审核 按钮既完成媒资的审批过程。
点击“审核”选择审核结果输入审核意见。
1.2.5 绑定媒资 课程计划创建好后需要绑定媒资文件比如如果课程计划绑定了视频文件进入课程在线学习界面后点课程计划名称则在线播放视频。如下图 如何将课程计划绑定媒资呢 1.教育机构用户进入课程管理页面并编辑某一个课程在课程大纲标签页的某一小节后可点击”添加视频“。
2.弹出添加视频对话框可通过视频关键字搜索已审核通过的视频媒资。
3.选择视频媒资点击提交按钮完成课程计划绑定媒资流程。 课程计划关联视频后如下图
1.3 数据模型 本模块媒资文件相关的数据表如下
媒资文件表存储文件信息包括图片、视频、文档等。 media_process: 待处理视频表。 media_process_history: 视频处理历史表记录已经处理成功的视频信息。 媒资文件与课程计划绑定关系表如下
2 搭建模块环境 2.1 架构的问题分析 当前要开发的是媒资管理服务目前为止共三个微服务内容管理、系统管理、媒资管理如下图 后期还会添加更多的微服务当前这种由前端直接请求微服务的方式存在弊端 如果在前端对每个请求地址都配置绝对路径非常不利于系统维护比如下边代码中请求系统管理服务的地址使用的是localhost
当系统上线后这里需要改成公网的域名如果这种地址非常多则非常麻烦。 基于这个问题可以采用网关来解决如下图
这样在前端的代码中只需要指定每个接口的相对路径如下所示
在前端代码的一个固定的地方在接口地址前统一加网关的地址每个请求统一到网关由网关将请求转发到具体的微服务。 为什么所有的请求先到网关呢 有了网关就可以对请求进行路由路由到具体的微服务减少外界对接微服务的成本比如400电话路由的试可以根据请求路径进行路由、根据host地址进行路由等 当微服务有多个实例时可以通过负载均衡算法进行路由如下
另外网关还可以实现权限控制、限流等功能。 项目采用Spring Cloud Gateway作为网关网关在请求路由时需要知道每个微服务实例的地址项目使用Nacos作用服务发现中心和配置中心整体的架构图如下
流程如下 1、微服务启动将自己注册到NacosNacos记录了各微服务实例的地址。 2、网关从Nacos读取服务列表包括服务名称、服务地址等。 3、请求到达网关网关将请求路由到具体的微服务。 要使用网关首先搭建NacosNacos有两个作用 1、服务发现中心。 微服务将自身注册至Nacos网关从Nacos获取微服务列表。 2、配置中心。 微服务众多它们的配置信息也非常复杂为了提供系统的可维护性微服务的配置信息统一在Nacos配置。
2.2 搭建Nacos
2.2.1 服务发现中心
Spring Cloud 一套规范 Spring Cloud alibaba: nacos服务注册中心配置中心 根据上节讲解的网关的架构图要使用网关首先搭建Nacos。 首先搭建Nacos服务发现中心。 在搭建Nacos服务发现中心之前需要搞清楚两个概念namespace和group namespace用于区分环境、比如开发环境、测试环境、生产环境。 group用于区分项目比如xuecheng-plus项目、xuecheng2.0项目 首先在nacos配置namespace: 登录Centos启动Naocs使用sh /data/soft/restart.sh将自动启动Nacos。 访问http://192.168.101.65:8848/nacos/ 账号密码nacos/nacos 登录成功点击左侧菜单“命名空间”进入命名空间管理界面
点击“新建命名空间”填写命名空间的相关信息。如下图
使用相同的方法再创建“测试环境”、生产环境的命名空间。
创建成功如下图
在教学中可以创建具体班级的命名空间假如创建1010班级的命名空间如下
注意如果使用dev1010命名空间在下边的配置中对namespace配置为dev1010。
首先完成各服务注册到Naocs下边将内容管理服务注册到nacos中。
在xuecheng-plus-parent中添加依赖管理
XML
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope
/dependency2在内容管理模块的接口工程、系统管理模块的接口工程中添加如下依赖
XML
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency3配置nacos的地址 在系统管理的接口工程的配置文件中配置如下信息
YAML
#微服务配置
spring:application:name: system-servicecloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-project在内容管理的接口工程的配置文件中配置如下信息 YAMLspring:application:name: content-apicloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-project4重启内容管理服务、系统管理服务。 待微服务启动成功进入Nacos服务查看服务列表
在 “开发环境” 命名空间下有两个服务这说明内容管理微服务和系统管理微服务在Nacos注册成功。 点击其它一个微服务的“详情”
通过上图可以查看微服务实例的地址。
2.2.2 配置中心
2.2.2.1 配置三要素
搭建完成Nacos服务发现中心下边搭建Nacos为配置中心其目的就是通过Nacos去管理项目的所有配置。 先将项目中的配置文件分分类 1、每个项目特有的配置 是指该配置只在有些项目中需要配置或者该配置在每个项目中配置的值不同。 比如spring.application.name每个项目都需要配置但值不一样以及有些项目需要连接数据库而有些项目不需要有些项目需要配置消息队列而有些项目不需要。 2、项目所公用的配置 是指在若干项目中配置内容相同的配置。比如redis的配置很多项目用的同一套redis服务所以配置也一样。 另外还需要知道nacos如何去定位一个具体的配置文件即namespace、group、dataid. 1、通过namespace、group找到具体的环境和具体的项目。 2、通过dataid找到具体的配置文件dataid有三部分组成 比如content-service-dev.yaml配置文件 由content-service-dev. (yaml)三部分组成 content-service第一部分它是在application.yaml中配置的应用名即spring.application.name的值。 dev第二部分它是环境名通过spring.profiles.active指定 Yaml: 第 所以如果我们要配置content-service工程的配置文件: 在开发环境中配置content-service-dev.yaml 在测试环境中配置content-service-test.yaml 在生产环境中配置content-service-prod.yaml 我们启动项目中传入spring.profiles.active的参数决定引用哪个环境的配置文件例如传入spring.profiles.activedev表示使用dev环境的配置文件即content-service-dev.yaml。
2.2.2.2 配置content-service 下边以开发环境为例对content-service工程的配置文件进行配置进入nacos进入开发环境。
点击加号添加一个配置
输入data id、group以及配置文件内容。 为什么没在nacos中配置下边的内容 YAML
spring:application:name: content-service因为刚才说了dataid第一部分就是spring.application.namenacos 客户端要根据此值确定配置文件 名称所以spring.application.name不在nacos中配置而是要在工程的本地进行配置。 在content-service工程的test/resources 中添加bootstrap.yaml内容如下 YAML
spring:application:name: content-servicecloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-projectconfig:namespace: devgroup: xuecheng-plus-projectfile-extension: yamlrefresh-enabled: true#profiles默认为devprofiles:active: dev在内容管理模块的接口工程和service工程配置依赖 XML
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId
/dependency配置完成运行content-service工程 的单元测试文件能否正常测试跟踪单元测试方法可以正常读取数据库的数据说明从nacos读取配置信息正常。 通过运行观察控制台打印出下边的信息NacosRestTemplate.java通过Post方式与nacos服务端交互读取配置信息。
Plain Text
[NacosRestTemplate.java:476] - HTTP method: POST, url: http://192.168.101.65:8848/nacos/v1/cs/configs/listener, body: {Listening-Configscontent-service.yaml?xuecheng-plus-project??dev?content-service-dev.yaml?xuecheng-plus-project?88459b1483b8381eccc2ef462bd59182?dev?content-service?xuecheng-plus-project??dev?, tenantdev}2.2.2.3配置content-api
以相同的方法配置content-api工程的配置文件在nacos中的开发环境中配置content-api-dev.yaml内容如下
server:servlet:context-path: /contentport: 63040# 日志文件配置路径
logging:config: classpath:log4j2-dev.xm
# swagger 文档配置
swagger:title: 学成在线内容管理系统description: 内容系统管理系统对课程相关信息进行业务管理数据base-package: com.xuecheng.contentenabled: trueversion: 1.0.0在content-api工程 的本地配置bootstrap.yaml内容如下 YAML
#微服务配置
spring:application:name: content-apicloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-projectconfig:namespace: devgroup: xuecheng-plus-projectfile-extension: yamlrefresh-enabled: trueextension-configs:- data-id: content-service-${spring.profiles.active}.yamlgroup: xuecheng-plus-projectrefresh: trueprofiles:active: dev
注意因为api接口工程依赖了service工程 的jar所以这里使用extension-configs扩展配置文件 的方式引用service工程所用到的配置文件。
extension-configs:- data-id: content-service-${spring.profiles.active}.yamlgroup: xuecheng-plus-projectrefresh: true如果添加多个扩展文件继续在下添加即可如下
extension-configs:- data-id: content-service-${spring.profiles.active}.yamlgroup: xuecheng-plus-projectrefresh: true- data-id: 填写文件 dataidgroup: xuecheng-plus-projectrefresh: true 启动content-api工程查询控制台是否打印出了请求nacos的日志如下: Bash [NacosRestTemplate.java:476] - HTTP method: POST, url: http://192.168.101.65:8848/nacos/v1/cs/configs/listener 并使用Httpclient测试课程查询接口是否可以正常查询。
2.2.3 公用配置
还有一个优化的点是如何在nacos中配置项目的公用配置呢 nacos提供了shared-configs可以引入公用配置。 在content-api中配置了swagger所有的接口工程 都需要配置swagger这里就可以将swagger的配置定义为一个公用配置哪个项目用引入即可。 单独在xuecheng-plus-common分组下创建xuecheng-plus的公用配置进入nacos的开发环境添加swagger-dev.yaml公用配置
删除接口工程中对swagger的配置。 项目使用shared-configs可以引入公用配置。在接口工程的本地配置文件 中引入公用配置如下
YAML
spring:application:name: content-apicloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-projectconfig:namespace: devgroup: xuecheng-plus-projectfile-extension: yamlrefresh-enabled: trueextension-configs:- data-id: content-service-${spring.profiles.active}.yamlgroup: xuecheng-plus-projectrefresh: trueshared-configs:- data-id: swagger-${spring.profiles.active}.yamlgroup: xuecheng-plus-commonrefresh: true- data-id: logging-${spring.profiles.active}.yamlgroup: xuecheng-plus-commonrefresh: trueprofiles:active: dev再以相同 的方法配置日志的公用配置。
在接口工程和业务工程引入logging-dev.yaml公用配置文件
配置完成重启content-api接口工程访问http://localhost:63040/content/swagger-ui.html 查看swagger接口文档是否可以正常访问查看控制台log4j2日志输出是否正常。
2.2.4 配置优先级
到目前为止已将所有微服务的配置统一在nacos进行配置用到的配置文件有本地的配置文件 bootstrap.yaml和nacos上的配置文件SpringBoot读取配置文件 的顺序如下
引入配置文件的形式有 1、以项目应用名方式引入 2、以扩展配置文件方式引入 3、以共享配置文件 方式引入 4、本地配置文件 各配置文件 的优先级项目应用名配置文件 扩展配置文件 共享配置文件 本地配置文件。
有时候我们在测试程序时直接在本地加一个配置进行测试比如下边的例子 我们想启动两个内容管理微服务此时需要在本地指定不同的端口通过VM Options参数在IDEA配置启动参数
通过-D指定参数名和参数值参数名即在bootstrap.yml中配置的server.port。
启动ContentApplication2发现端口仍然是63040这说明本地的配置没有生效。 这时我们想让本地最优先可以在nacos配置文件 中配置如下即可实现 YAML
#配置本地优先
spring:cloud:config:override-none: true再次启动ContentApplication2端口为63041。
2.2.5 导入配置文件
课程资料中提供了系统用的所有配置文件nacos_config_export.zip下边将nacos_config_export.zip导入nacos。 进入具体的命名空间点击“导入配置”
打开导入窗口
相同的配置选择覆盖配置。
点击“上传文件”选择资料中的nacos_config_export.zip开始导入。
2.2.6 作业
按照上边的方法 自行将系统管理服务的配置信息在nacos上进行配置。
2.3 搭建Gateway
本项目使用Spring Cloud Gateway作为网关下边创建网关工程。 新建一个网关工程。
工程结构
添加依赖 XML
parentgroupIdcom.xuecheng/groupIdartifactIdxuecheng-plus-parent/artifactIdversion0.0.1-SNAPSHOT/versionrelativePath../xuecheng-plus-parent/relativePath
/parent
artifactIdxuecheng-plus-gateway/artifactIddependencies!--网关--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependency!--服务发现中心--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency!-- 排除 Spring Boot 依赖的日志包冲突 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdexclusionsexclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-logging/artifactId/exclusion/exclusions/dependency!-- Spring Boot 集成 log4j2 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-log4j2/artifactId/dependency/dependencies配置网关的bootstrap.yaml配置文件 YAML
#微服务配置
spring:application:name: gatewaycloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-projectconfig:namespace: devgroup: xuecheng-plus-projectfile-extension: yamlrefresh-enabled: trueshared-configs:- data-id: logging-${spring.profiles.active}.yamlgroup: xuecheng-plus-commonrefresh: trueprofiles:active: dev在nacos上配置网关路由策略
详细配置如下 YAML
server:port: 63010 # 网关端口
spring:cloud:gateway:
# filter:
# strip-prefix:
# enabled: trueroutes: # 网关路由配置- id: content-api # 路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://content-api # 路由的目标地址 lb就是负载均衡后面跟服务名称predicates: # 路由断言也就是判断请求是否符合路由规则的条件- Path/content/** # 这个是按照路径匹配只要以/content/开头就符合要求
# filters:
# - StripPrefix1- id: system-api# uri: http://127.0.0.1:8081uri: lb://system-apipredicates:- Path/system/**
# filters:
# - StripPrefix1- id: media-api# uri: http://127.0.0.1:8081uri: lb://media-apipredicates:- Path/media/**
# filters:
# - StripPrefix1启动网关工程通过网关工程访问微服务进行测试。 在http-client-env.json中配置网关的地址
使用httpclient测试课程查询 接口如下 JSON
### 课程查询列表
POST {{gateway_host}}/content/course/list?pageNo2pageSize1
Content-Type: application/json{auditStatus: 202002,courseName:
}运行观察是否可以正常访问接口 如下所示可以正常请求接口。
JSON
http://localhost:63010/content/course/list?pageNo2pageSize1HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: application/json
Date: Sun, 11 Sep 2022 09:54:32 GMT{items: [{id: 26,companyId: 1232141425,companyName: null,name: spring cloud实战,users: 所有人,tags: null,mt: 1-3,mtName: null,st: 1-3-2,stName: null,grade: 200003,teachmode: 201001,description: 本课程主要从四个章节进行讲解 1.微服务架构入门 2.spring cloud 基础入门 3.实战Spring Boot 4.注册中心eureka。,pic: https://cdn.educba.com/academy/wp-content/uploads/2018/08/Spring-BOOT-Interview-questions.jpg,createDate: 2019-09-04 09:56:19,changeDate: 2021-12-26 22:10:38,createPeople: null,changePeople: null,auditStatus: 202002,status: 203001,coursePubId: null,coursePubDate: null}],counts: 29,page: 2,pageSize: 1
}网关工程搭建完成即可将前端工程中的接口地址改为网关的地址
启动前端工程测试之前开发内容管理模块的功能。 观察网关控制台通过网关转发课程查询的日志如下
Bash
Handler is being applied: {urihttp://192.168.101.1:63040/content/course/list?pageNo2pageSize1, methodPOST}2.4 搭建媒资工程
至此网关、Nacos已经搭建完成下边将媒资工程导入项目。 从课程资料中获取媒资工程 xuecheng-plus-media拷贝到项目工程根目录。 右键pom.xml转为maven工程。
下边做如下配置 1、创建媒资数据库xc_media并导入资料目录中的xcplus_media.sql 2、修改nacos上的media-service-dev.yaml配置文件中的数据库链接信息 重启media-api工程只要能正常启动成功即可稍后根据需求写接口。