当前位置: 首页 > news >正文

4.1 媒资管理模块 - Nacos与Gateway搭建

文章目录

  • 媒资管理模块 - 媒资项目搭建
  • 一、需求分析
    • 1.1 介绍
    • 1.2 数据模型
    • 1.3 分析网关
  • 二、 搭建Nacos
    • 2.1 服务发现中心
      • 2.2.1 Maven
      • 2.2.2 配置Nacos
    • 2.2 配置中心
      • 2.2.1 介绍
      • 2.2.2 Maven 坐标
      • 2.2.3 配置 content-api 工程
      • 2.2.4 配置 content-service 工程
      • 2.2.5 配置 system-api 工程
      • 2.2.6 配置 system-service 工程
    • 2.3 配置中心 - 公用配置
    • 2.4 配置中心 - 配置加载优先级
    • 2.5 配置中心 - 灵活切换环境
    • 2.6 配置中心 - 导入配置
  • 三、 搭建 Gateway 网关
    • 3.1 创建xuecheng-plus-gateway网关工程
    • 3.2 Maven坐标
    • 3.3 bootstrap.yaml配置文件
    • 3.4 Nacos配置网关路由策略
    • 3.5 测试网关

媒资管理模块 - 媒资项目搭建

一、需求分析

1.1 介绍

媒资管理系统是每个在线教育平台所必须具备的

每个教学机构都可以在媒资系统管理自己的教学资源,包括:视频、教案等文件,目前媒资管理的主要管理对象是视频、图片、文档等,包括:媒资文件的查询、文件上传、视频处理等.

媒资查询:教学机构查询自己所拥有的媒资信息

文件上传:包括上传图片、上传文档、上传视频

比如说内容管理中课程编辑和新增时需要添加课程封面图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

视频处理:视频上传成功,系统自动对视频进行编码处理

假如我们上传了一个avi格式的视频,这个视频在浏览器上是无法播放的需要进行转码,比如说转成Mp4格式

文件删除:教学机构删除自己上传的媒资文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.2 数据模型

image-20231217015244539

mdia_files媒资文件表:存储文件信息,包括图片、视频、文档等,并不是文件本身,真正的文件存储在我们的分布式系统中。

media_process: 待处理视频表。

media_process_history: 视频处理历史表,记录已经处理成功的视频信息。


视频处理完成之后要绑定课程计划

媒资文件与课程计划绑定关系表如下:

课程计划表teachplan

课程计划与媒资关系teachplan_media,主要是操作这张表,将媒资与课程计划进行绑定

image-20231217015322727

1.3 分析网关

目前我们有三个服务,如下所示:

内容管理服务:管理课程信息

系统管理服务:目前引入了数据字典,不会有业务的东西,是一些系统本身的内容,比如日志、系统备份、数据字典

媒资管理服务:管理课程相关视频、文档等文件

image-20231217200252172

但是像上图那样,前端直接请求后端的服务会有一定的弊端

在前端对每个请求地址都配置绝对路径,非常不利于系统维护,假如后端的端口或者IP改变后,前端的每个请求地址都需要改变,这是非常不方便的

下图所示便是绝对路径,假如我们放到服务器上后,localhost显然是不合适的,那就设置成一个局域网的ip了

image-20231217200932337

基于这个问题可以采用网关来解决这个麻烦

之前我也学过网关:

SpringCloud - Gateway统一网关

网关的作用其实就是路由,我们请求到网关,网关会把请求分配到相应的后端服务上

之前前端是和多个后端服务进行通信,但是现在不需要了,只需要请求网关就好了

总的来说,前端和网关对接,网关和后端的多个服务对接

image-20231217200917167

此时前端的路径变成下图所示,只需要指定每个接口的相对路径

在前端代码的一个固定的地方在接口地址前统一加网关的地址,每个请求统一到网关,由网关将请求转发到具体的微服务

image-20231217201001640


为什么所有的请求先到网关呢

有了网关就可以对请求进行路由,路由到具体的微服务,减少外界对接微服务的成本。

路由可以根据请求路径进行路由、根据host地址进行路由等, 当微服务有多个实例时可以通过负载均衡算法进行路由,

另外,网关还可以实现权限控制、限流等功能


网关是怎么知道微服务的IP地址呢

我们可以将服务的信息记录在Nacos上面,网关可以进行读取

image-20231217203220089

二、 搭建Nacos

之前做的Nacos笔记

Nacos知识大全

Spring Cloud :一套规范

Spring Cloud alibaba: 这一套实现中就有nacos服务注册中心,配置中心

namespace和group的概念在上面的文章中有

namespace:用于区分环境、比如:开发环境、测试环境、生产环境。

group:用于区分项目,比如:xuecheng-plus项目、xuecheng2.0项目

访问:http://192.168.101.65:8848/nacos/

账号密码:nacos/nacos

image-20231217204505598

2.1 服务发现中心

也就是服务注册中心

下面是创建的命名空间namespace

image-20231217204942094

注册完成命名空间namespace之后我们要把微服务注册到nacos,并且每个服务都是一个group

2.2.1 Maven

  • xuecheng-plus-parent

这是所有工程的父工程

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope>
</dependency>

image-20231217205646424

  • 上报服务信息

在内容管理模块的接口工程、系统管理模块的接口工程中添加如下依赖

如果是上报服务信息,就是用下面这个坐标

哪个模块需要上报服务,就写在哪里,假如说service模块需要上报服务,那service模块的pom就需要引入下面的坐标

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

image-20231217211224421

2.2.2 配置Nacos

既然我们的服务需要向Nacos报服务信息,那怎么将信息报告到Nacos呢?

我们也需要配置一下Nacos的地址,说明我们要向哪上报服务信息

在系统管理的接口工程的配置文件中配置如下信息

spring:application:name: system-apicloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-project

在内容管理的接口工程的配置文件中配置如下信息

spring:application:name: content-apicloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-project

当启动项目后,查看Nacos

image-20231217213430604

并且点击“详情”,还可以查看IP和端口

image-20231217213939392

2.2 配置中心

2.2.1 介绍

实现配置中心的最终目标:将项目中的配置信息放入到Nacos上,不重启项目就可以修改服务的各种配置信息

对微服务中公有的配置信息和特有的配置信息进行分别配置

将项目中的配置文件分类

  • 每个项目特有的配置

    是指该配置只在有些项目中需要配置,或者该配置在每个项目中配置的值不同

    比如:spring.application.name每个项目都需要配置但值不一样,以及有些项目需要连接数据库而有些项目不需要,有些项目需要配置消息队列而有些项目不需要

    下面的配置每个服务可能是不同的

    server:servlet:context-path: /systemport: 63110  
    #微服务配置
    spring:application:name: system-api    
    
  • 项目所公用的配置

    是指在若干项目中配置内容相同的配置。

    比如:redis的配置,很多项目用的同一套redis服务所以配置也一样

    # 日志文件配置路径
    logging:config: classpath:log4j2-dev.xml# swagger 文档配置
    swagger:title: "学成在线系统管理"description: "系统管理接口"base-package: com.xuecheng.systemenabled: trueversion: 1.0.0
    

Nacos是如何定位一个具体的配置文件的

namespace、group、dataid

image-20231217220931783

  • 通过namespace、group找到具体的环境和具体的项目

  • 通过dataid找到具体的配置文件

    dataid有三部分组成,content-api-dev.yaml配置文件 由(content-api)-(dev). (yaml)三部分组成

    第一部分,它是在application.yaml中配置的应用名,即spring.application.name的值

    第二部分,它是环境名,通过spring.profiles.active指定

    第三部分,它是配置文件的后缀,目前nacos支持properties、yaml等格式类型,本项目选择yaml格式类型

    如果我们要配置content-api工程的配置文件:

    在开发环境中配置content-api-dev.yaml

    在测试环境中配置content-api-test.yaml

    在生产环境中配置content-api-prod.yaml

    我们启动项目中传入spring.profiles.active的参数决定引用哪个环境的配置文件,例如:传入spring.profiles.active=dev表示使用dev环境的配置文件即content-service-dev.yaml

#微服务配置
spring:application:name: content-api # 1.服务名cloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-projectprofiles:active: dev # 2.配置环境名

2.2.2 Maven 坐标

<!--服务注册-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.2.3 配置 content-api 工程

将Maven坐标导入到content-api工程中的pom文件里

在Nacos中我们可以点击右侧的“+”来添加一个配置

image-20231217222358541

配置如下图所示

image-20231217223133064

目前content-api项目bootstrap.yml文件的配置如下

我们发现dataid的三要素并没有被提取出来,还是在文件中放着

被注释掉的就是目前被提取出来的内容

#server:
#  servlet:
#    context-path: /content
#  port: 63040
#微服务配置
spring:application:name: content-api #1.服务名 cloud:nacos:server-addr: 192.168.101.65:8848discovery: #服务发现(注册)配置namespace: devgroup: xuecheng-plus-projectconfig: #服务注册配置namespace: dev # 命名空间group: xuecheng-plus-project # 组file-extension: yaml # 3.文件扩展名refresh-enabled: true # 当将 refresh 设置为 true 时,应用程序会定期从Nacos服务器获取配置并刷新已加载的配置profiles:active: dev # 2.环境名
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://192.168.101.65:3306/xcplus_content?serverTimezone=UTC&userUnicode=true&useSSL=false&
#    username: root
#    password: mysql
# 日志文件配置路径
logging:config: classpath:log4j2-dev.xmlswagger:title: "学成在线内容管理系统"description: "内容系统管理系统对课程相关信息进行管理"base-package: com.xuecheng.contentenabled: trueversion: '1.0.0'

此时就可以启动content-api项目,一切正常

其中这个项目所需要的Nacos坐标

<!--服务注册-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--服务发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.2.4 配置 content-service 工程

其实在content-api工程bootstrap.yaml配置文件中不需要配置数据库的信息,因为content-api工程并不会访问数据库

之前在content-api工程配置文件配置数据库的信息是因为content-api工程会引用content-service工程,进而操作的数据库

真正访问数据库的工程是content-api,所以其实也可以将数据库的配置信息配置在content-service

所以下面将修改content-service工程与content-api工程的配置文件

  • 修改content-api工程的配置文件

    删除Nacos中数据库连接的配置

    image-20231218001325187

    在content-api工程配置文件中引用(扩展)content-service工程的配置文件

为什么是扩展的配置文件

除了特有的配置、公用配置,还有扩展的配置

content-api工程运行的时候需要引入content-service工程,但是content-api功能从Nacos拿到的仅仅是自己特有的

所以需要将content-service工程在Nacos的配置文件引过来(也就是扩展一下)

下面的配置新增了extension-configs项,也就是指定扩展配置文件

#server:
#  servlet:
#    context-path: /content
#  port: 63040
#微服务配置
spring:application:name: content-api # 项目名cloud:nacos:server-addr: 192.168.101.65:8848 #Nacos地址discovery: #服务发现(服务注册)namespace: dev #命名空间group: xuecheng-plus-project #组别config: # 配置中心namespace: dev #命名空间group: xuecheng-plus-projectfile-extension: yaml #文件后缀refresh-enabled: trueextension-configs: # 扩展配置信息的引用#${spring.profiles.active} 这个写法就会找到此文件中spring.profiles.active对应的值- data-id: content-service-${spring.profiles.active}.yamlgroup: xuecheng-plus-projectrefresh: trueprofiles:active: dev
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://192.168.101.65:3306/xcplus_content?serverTimezone=UTC&userUnicode=true&useSSL=false&
#    username: root
#    password: mysql
# 日志文件配置路径
logging:config: classpath:log4j2-dev.xmlswagger:title: "学成在线内容管理系统"description: "内容系统管理系统对课程相关信息进行管理"base-package: com.xuecheng.contentenabled: trueversion: '1.0.0'
  • 修改content-service工程的配置文件

    此工程不需要将服务进行上报,所以只需要一个服务注册的坐标即可

<!--服务注册-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

此时bootstrap.yaml中的配置,注释掉的datasource信息将会配置在Nacos中

#微服务配置
spring:application:name: content-service # 服务名profiles:active: dev # 运行环境  cloud:nacos:server-addr: 192.168.101.65:8848 #Nacos地址config: #服务配置相关信息namespace: dev # 命名空间group: xuecheng-plus-project #组file-extension: yaml #文件后缀refresh-enabled: true
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://192.168.101.65:3306/xcplus_content?serverTimezone=UTC&userUnicode=true&useSSL=false&
#    username: root
#    password: mysql# 日志文件配置路径
logging:config: classpath:log4j2-dev.xml
swagger:title: "学成在线内容管理系统"description: "内容系统管理系统对课程相关信息进行管理"base-package: com.xuecheng.contentenabled: trueversion: '1.0.0'

Nacos中配置信息

image-20231217233857995

然后可以在测试类中测试一下,是正常的

image-20231217235824759


content-service项目中需要的nacos坐标

<!--服务注册-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

都配置完成后重启content-api项目,看是否启动成功,如果成功了说明配置也是成功的

2.2.5 配置 system-api 工程

  • bootstrap.yaml配置文件
#server:
#  servlet:
#    context-path: /system
#  port: 63110
#微服务配置
spring:application:name: system-apicloud:nacos:server-addr: 192.168.101.65:8848discovery:namespace: devgroup: xuecheng-plus-projectconfig: # 配置中心 namespace: dev #命名空间group: xuecheng-plus-projectfile-extension: yaml #文件后缀refresh-enabled: true # 当将 refresh 设置为 true 时,应用程序会定期从Nacos服务器获取配置并刷新已加载的配置extension-configs: # 扩展配置信息的引用#${spring.profiles.active} 这个写法就会找到此文件中spring.profiles.active对应的值- data-id: system-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
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://192.168.101.65:3306/xcplus_system?serverTimezone=UTC&userUnicode=true&useSSL=false&
#    username: root
#    password: mysql
# 日志文件配置路径
#logging:
#  config: classpath:log4j2-dev.xml
#
## swagger 文档配置
#swagger:
#  title: "学成在线系统管理"
#  description: "系统管理接口"
#  base-package: com.xuecheng.system
#  enabled: true
#  version: 1.0.0
  • Nacos中配置
server:servlet:context-path: /systemport: 63110
  • Maven坐标
<!--服务注册-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--服务发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.2.6 配置 system-service 工程

  • bootstrap.yaml配置文件
#微服务配置
spring:application:name: system-service # 服务名profiles:active: dev # 运行环境  cloud:nacos:server-addr: 192.168.101.65:8848 #Nacos地址config: #服务配置相关信息namespace: dev # 命名空间group: xuecheng-plus-project #组file-extension: yaml #文件后缀refresh-enabled: true
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://192.168.101.65:3306/xcplus_content?serverTimezone=UTC&userUnicode=true&useSSL=false&
#    username: root
#    password: mysql
  • Nacos配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.101.65:3306/xcplus_system?serverTimezone=UTC&userUnicode=true&useSSL=false&username: rootpassword: mysql
  • Maven坐标
<!--服务注册-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.3 配置中心 - 公用配置

nacos提供了shared-configs可以引入公用配置

每个工程的bootstrap.yaml文件中都会有下面内容,随意我们可以配置一个公用配置

logging:config: classpath:log4j2-dev.xmlswagger:title: "学成在线内容管理系统"description: "内容系统管理系统对课程相关信息进行管理"base-package: com.xuecheng.contentenabled: trueversion: '1.0.0'

单独在xuecheng-plus-common分组下创建xuecheng-plus的公用配置,进入nacos的开发环境,添加swagger-dev.yaml公用配置

image-20231218002741929

相同的方式添加logging-dev.yaml公用配置

image-20231218002804244


**在content-api工程bootstrap.yaml配置文件中引入swagger-dev.yaml、loggin-dev.yaml公用配置文件 **

#微服务配置
spring:application:name: content-api # 项目名cloud:nacos:server-addr: 192.168.101.65:8848 #Nacos地址discovery: #服务发现(服务注册)namespace: dev #命名空间group: xuecheng-plus-project #组别config: # 配置中心namespace: dev #命名空间group: xuecheng-plus-projectfile-extension: yaml #文件后缀refresh-enabled: trueextension-configs: # 扩展配置信息的引用#${spring.profiles.active} 这个写法就会找到此文件中spring.profiles.active对应的值- 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

重新启动content-api工程,打开swagger页面,说明没有什么问题

image-20231218003720580

2.4 配置中心 - 配置加载优先级

这个地方其实可以看看下面这个文章Springboot配置文件-多环境开发控制

SpringBoot读取配置文件的顺序

image-20231218004318500

引入配置文件的形式有

  • 以项目应用名方式引入

    微服务它所对应的自己特有的配置

    也就是通过过项目名、环境名、文件后缀信息(三要素)从Nacos过去的配置

    spring:application:name: content-api # 项目名profiles:active: dev #环境
    
  • 以扩展配置文件方式引入

          extension-configs: # 扩展配置信息的引用#${spring.profiles.active} 这个写法就会找到此文件中spring.profiles.active对应的值- data-id: content-service-${spring.profiles.active}.yamlgroup: xuecheng-plus-projectrefresh: true
    
  • 以共享配置文件 方式引入

    shared-configs: #公用配置- data-id: swagger-${spring.profiles.active}.yamlgroup: xuecheng-plus-commonrefresh: true- data-id: logging-${spring.profiles.active}.yamlgroup: xuecheng-plus-commonrefresh: true
    
  • 本地配置文件

    #微服务配置
    spring:application:name: content-api # 项目名cloud:nacos:server-addr: 192.168.101.65:8848 #Nacos地址discovery: #服务发现(服务注册)namespace: dev #命名空间group: xuecheng-plus-project #组别config: # 配置中心namespace: dev #命名空间group: xuecheng-plus-projectfile-extension: yaml #文件后缀refresh-enabled: true # 当将 refresh 设置为 true 时,应用程序会定期从Nacos服务器获取配置并刷新已加载的配置extension-configs: # 扩展配置信息的引用#${spring.profiles.active} 这个写法就会找到此文件中spring.profiles.active对应的值- 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
    

前面三个是在Nacos,最后一个在本地

假如上面方式引入的配置冲突了怎么办,以谁的为准

看下面的优先级

默认情况各配置文件的优先级

  • 项目应用名配置文件 > 扩展配置文件 > 共享配置文件 > 本地配置文件

问题,同个项目怎么启动多个

但是"项目应用名配置文件"优先级最高,那我们一个工程怎么运行两个呀,比如说content-api工程在Nacos中配置的运行端口是63040,那我们在本地将端口改成63041,是运行不了的,那我们实际项目部署的时候怎么办呢?

那肯定会有人想,项目部署最终都会执行 java -jar命令,我们只需要加一个临时参数就好了

image-20231218005846209

这种方法也是不行的,这种也是相当于在本地配置

那怎么解决这个问题呢

  #配置本地优先
spring:cloud:config:override-none: true

在Nacos中配置一下就可以了,配置成本地配置最优先即可

image-20231218010318387

假如我们端口号,Nacos 63010、bootstrap.yaml 12321、application.yaml 8065 文件中各有配置,并且已经在Nacos中配置了本地优先策略,那启动项目后会运行哪个端口号呢

image-20231218223916504

假如去掉Nacos中配置的本地优先策略后,再启动项目,端口号呢

以Nacos中为准

image-20231218224116605

bootstrap.yml/bootstrap.properties:这些文件在应用程序的早期就被加载,主要用于系统级的配置,如加密属性的解密、配置服务的设置等。bootstrap文件的加载时机在application文件之前,因此可以说它的优先级更高。(优先级高优先加载,但是会被后加载的内容覆盖)

application.yml/application.properties:这些是Spring Boot应用程序的主要配置文件,用于配置应用程序特定的各种属性。它们在bootstrap配置之后加载。(所以application内容会覆盖bootstrap,但是实际上的优先级是bootstrap>application)

在加载时,加载的顺序是yml,yaml,properities,所以在加载配置文件时,如果有在配置文件名相同时,以properities结尾的配置文件会生效,因为以properities结尾的文件是最后被加载的,覆盖了之前的相同配置

总结默认加载的优先级

  • bootstrap > application

  • yml > yaml > properities

假如在Nacos中配置本地文件优先时,配置生效顺序:

如果配置重复的话,会以左侧为主文件的配置为主

application.properities > application.yaml > application.yml >bootstrap.properities > bootstrap.yaml > bootstrap.yml

2.5 配置中心 - 灵活切换环境

可以直接才配置文件中进行修改

image-20231218010910974

或者是配置临时参数

image-20231218011025732

2.6 配置中心 - 导入配置

点击所选的”导入配置“

image-20231218011319527

假如说导入配置时出现重复的配置,怎么办?

根据实际情况选择即可,之后点击“上传文件”即可

image-20231218011442946

选择合适的文件zip包即可,不需要自己解压

image-20231218011553666

三、 搭建 Gateway 网关

搭建Spring Cloud Gateway,创建网关工程

SpringCloud - Gateway统一网关

之前搭建了Nacos,现在可以搭建一下Gateway网关

image-20231218214426690

3.1 创建xuecheng-plus-gateway网关工程

创建xuecheng-plus-gateway网关工程

image-20231218220649176

3.2 Maven坐标

<parent><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-parent</artifactId><version>0.0.1-SNAPSHOT</version><relativePath>../xuecheng-plus-parent</relativePath>
</parent>
<artifactId>xuecheng-plus-gateway</artifactId><dependencies><!--网关--><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><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- 排除 Spring Boot 依赖的日志包冲突 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!-- Spring Boot 集成 log4j2 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency></dependencies>

3.3 bootstrap.yaml配置文件

#微服务配置
spring:application:name: gatewaycloud:#下面的配置是从Nacos拉取配置文件,并且要将服务上报到nacosnacos: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

3.4 Nacos配置网关路由策略

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:
#            - StripPrefix=1- id: system-api# uri: http://127.0.0.1:8081uri: lb://system-apipredicates:- Path=/system/**
#          filters:
#            - StripPrefix=1- id: media-api# uri: http://127.0.0.1:8081uri: lb://media-apipredicates:- Path=/media/**
#          filters:
#            - StripPrefix=1

3.5 测试网关

启动xuecheng-plus-gateway工程后,在Nacos发现有服务

image-20231218230440022

但是并不是我们启动项目之后,Nacos立即拿到服务的,会有30s的空窗期

假如说我们请求一个服务返回的响应状态码是503的话,很可能是我们请求的项目并没有启动,我们只需要启动对应的项目就好了

网关工程搭建完成即可将前端工程中的接口地址改为网关的地址

image-20231218231320893

启动前端工程,查看是否有数据,如果有说明之前所有的配置是没有任何问题的

相当正常,忐忑的心放下了

image-20231218233729319

相关文章:

4.1 媒资管理模块 - Nacos与Gateway搭建

文章目录 媒资管理模块 - 媒资项目搭建一、需求分析1.1 介绍1.2 数据模型1.3 分析网关 二、 搭建Nacos2.1 服务发现中心2.2.1 Maven2.2.2 配置Nacos 2.2 配置中心2.2.1 介绍2.2.2 Maven 坐标2.2.3 配置 content-api 工程2.2.4 配置 content-service 工程2.2.5 配置 system-api …...

1641:【例 1】矩阵 A×B

【题目描述】 矩阵 A 规模为 nm &#xff0c;矩阵 B 规模为 mp &#xff0c;现需要你求 AB 。 矩阵相乘的定义&#xff1a;nm 的矩阵与 mp 的矩阵相乘变成 np 的矩阵&#xff0c;令 aik 为矩阵 A 中的元素&#xff0c;bkj 为矩阵 B 中的元素&#xff0c;则相乘所得矩阵 C 中的…...

iOS问题记录 - iOS 17通过NSUserDefaults设置UserAgent无效

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 最近维护一个老项目时遇到的问题。说起这老项目我就有点头疼&#xff0c;一个快十年前的项目&#xff0c;这么说你可能不觉得有什么&#xff0c;但是你想想Swift也才发布不到十年&#xff08;2014年6月发布&#xff0…...

linux的一些典型面试题解读

目录 前言1 Linux 文件系统2 Shell 编程3 进程管理4 用户和权限管理5 软件包管理6 网络配置7 系统监控和日志8 存储管理9 安全性10 常见命令11 系统启动流程12 Linux 进程间通信方式13 Linux 中的 I/O 多路复用14 Shell 脚本优化与调试15 Linux 文件权限与 ACL16 Linux 中的环境…...

tortoisesvn各版本下载链接

https://tortoisesvn.net 无法访问最新版本下载 TortoiseSVN download | SourceForge.net 所有版本下载 TortoiseSVN - Browse Files at SourceForge.net...

[自动化运维工具]ansible简单介绍和常用模块

ansible 源操作主机功能 自动化运维&#xff08;playbook剧本yaml&#xff09; 是基于python开发的一个配置管理和应用部署工具&#xff0c;在自动化运维中&#xff0c;现在还是异军突起 ansible能批量配置&#xff0c;部署&#xff0c;管理上千台主机&#xff0c;类似于xshell…...

记一次渗透测试信息收集-越权

目录 一、信息收集 子域名收集 存活探测 二、越权 越权一 越权二 一、信息收集 子域名收集 使用subfinder进行子域名收集 语法&#xff1a;subfinder.exe -d xx.com -all -o qq1.txt -v //结合自己渗透经验&#xff0c;多渠道收集子域名&#xff0c;汇总去重。 …...

Flink系列之:Table API Connectors之JSON Format

Flink系列之&#xff1a;Table API Connectors之JSON Format 一、JSON Format二、依赖三、创建一张基于 JSON Format 的表四、Format 参数五、数据类型映射关系 一、JSON Format JSON Format 能读写 JSON 格式的数据。当前&#xff0c;JSON schema 是从 table schema 中自动推…...

2018年第七届数学建模国际赛小美赛B题世界杯足球赛的赛制安排解题全过程文档及程序

2018年第七届数学建模国际赛小美赛 B题 世界杯足球赛的赛制安排 原题再现&#xff1a; 有32支球队参加国际足联世界杯决赛阶段的比赛。但从2026年开始&#xff0c;球队的数量将增加到48支。由于时间有限&#xff0c;一支球队不能打太多比赛。因此&#xff0c;国际足联提议改变…...

【为数据之道学习笔记】5-7五类数据主题联接的应用场景

在数字化转型的背景下&#xff0c;华为的数据消费已经不再局限于传统的报表分析&#xff0c;还要支持用户的自助分析、实时分析&#xff0c;通过数据的关联&#xff0c;支持业务的关联影响分析以及对目标对象做特征识别&#xff0c;进行特定业务范围圈定、差异化管理与决策等。…...

得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛

近日&#xff0c;得帆信息创始人兼CEO张桐&#xff0c;作为百度风投被投代表企业创始人受邀出席“向未来&#xff0c;共成长” BV百度风投AIGC主题论坛。 与包括上海市徐汇区相关部门领导、百度集团相关事业部负责人及代表&#xff0c;以及来自国寿资本、中网投、麦顿投资的投资…...

云原生之深入解析减少Docker镜像大小的优化技巧

一、什么是 Docker&#xff1f; Docker 是一种容器引擎&#xff0c;可以在容器内运行一段代码&#xff0c;Docker 镜像是在任何地方运行应用程序而无需担心应用程序依赖性的方式。要构建镜像&#xff0c;docker 使用一个名为 Dockerfile 的文件&#xff0c;Dockerfile 是一个包…...

记一次java for循环改造多线程的操作

背景 今天在开发质量平台时需要获取某些数据&#xff0c;要请求公司某个工程的OpenAPI接口A。此接口为返回通用数据的接口&#xff0c;且接口本身的RT都在2&#xff5e;3秒之间。使用该接口&#xff0c;需要进行两次循环获取&#xff0c;然后对返回数据进行处理组装&#xff0…...

Java面试整理-Java复制

Java复制 在Java中,复制对象或数据通常涉及不同的场景和方法。以下是几种常见的复制情况及其相关方法: 基本数据类型的复制:基本数据类型(如int, double, char等)在Java中是通过值传递的。当你将一个基本数据类型的值赋给另一个变量时,实际上是创建了一个新的值。 int a …...

wsl kafka的简单应用

安装并配置单机版kafka所需环境 wsl2 环境可用性较高&#xff0c;如下介绍在该环境中安装单机版本kafka的详细过程。 启动命令行工具启动wsl&#xff1a;wsl --user root --cd ~&#xff0c;&#xff08;以root用户启动&#xff0c;进入wsl后当前路径为~“用户主目录”&#…...

2023年国赛高教杯数学建模D题圈养湖羊的空间利用率解题全过程文档及程序

2023年国赛高教杯数学建模 D题 圈养湖羊的空间利用率 原题再现 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养&#xff0c;适应不同种类、不同阶段的牲畜对空间的不同要求&#xff0c;以保障牲畜安全和健康&#xff1b;与此同时&#xff0c;也要尽量减少空间闲置所…...

Flink系列之:Table API Connectors之Raw Format

Flink系列之&#xff1a;Table API Connectors之Raw Format 一、Raw Format二、示例三、Format 参数四、数据类型映射 一、Raw Format Raw format 允许读写原始&#xff08;基于字节&#xff09;值作为单个列。注意: 这种格式将 null 值编码成 byte[] 类型的 null。这样在 ups…...

社交网络分析3:社交网络隐私攻击、保护的基本概念和方法 + 去匿名化技术 + 推理攻击技术 + k-匿名 + 基于聚类的隐私保护算法

社交网络分析3&#xff1a;社交网络隐私攻击、保护的基本概念和方法 去匿名化技术 推理攻击技术 k-匿名 基于聚类的隐私保护算法 写在最前面社交网络隐私泄露用户数据暴露的途径复杂行为的隐私风险技术发展带来的隐私挑战经济利益与数据售卖防范措施 社交网络 用户数据隐私…...

2023大湾区汽车创新大会在深圳坪山开幕

12月15日&#xff0c;2023大湾区汽车创新大会在深圳坪山开幕。 本次大会是由广东省科学技术厅、深圳市发展和改革委员会、深圳市工业和信息化局、中共深圳市新能源和智能网联汽车产业链委员会、坪山区人民政府指导&#xff0c;北京理工大学深圳汽车研究院、广东省大湾区新能源汽…...

Graylog 中日志级别及其对应的数字

在 Graylog 中&#xff0c;日志级别 level 通常使用数字表示&#xff0c;数字越低表示日志级别越高。以下是常见的日志级别及其对应的数字表示&#xff1a; DEBUG&#xff08;调试&#xff09;&#xff1a;对应数字 7。INFO&#xff08;信息&#xff09;&#xff1a;对应数字 …...

智能手表上的音频(五):录音

上篇讲了语音通话&#xff0c;本篇讲录音。录音功能就是把录到的音频保存成文件。保存文件的格式支持两种&#xff1a;一是PCM(16K采样)的WAV格式&#xff0c;二是AMR-NB&#xff08;8k采样&#xff09;的AMR格式。WAV格式简单&#xff1a;44字节的文件头PCM 数据&#xff0c;示…...

2023.12.17 关于 Redis 的特性和应用场景

目录 引言 Redis 特性 内存中存储数据 可编程性 可扩展性 持久化 支持集群 高可用性 Redis 优势 Redis 用作数据库 Redis 相较于 MySQL 优势 Redis 相较于 MySQL 劣势 Redis 用作缓存 典型场景 Redis 存储 session 信息 Redis 用作消息队列 初心 消息队列的…...

智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.社会群体算法4.实验参数设定5.算法结果6.…...

Kotlin 笔记 -- Kotlin 语言特性的理解(二)

都是编译成字节码&#xff0c;为什么 Kotlin 能支持 Java 中没有的特性&#xff1f; kotlin 有哪些 Java 中没有的特性&#xff1a; 类型推断、可变性、可空性自动拆装箱、泛型数组高阶函数、DSL顶层函数、扩展函数、内联函数伴生对象、数据类、密封类、单例类接口代理、inter…...

数据结构【1】:数组专题

一、定义 数组是编程中一种强大的数据结构&#xff0c;它允许您存储和操作相同类型元素的集合。在 Python 中&#xff0c;数组是通过数组模块创建的&#xff0c;该模块提供了一个简单的接口来创建、操作和处理数组。 二、创建数组 在 Python 中&#xff0c;可以使用内置的 a…...

【Spring】Spring 事务

Spring 事务 文章目录 Spring 事务1. 简介2. Spring事务管理器3. 基本使用4. 属性剖析5. 声明式事务问题场景5.1 事务不生效5.2 事务不回滚5.3 大事务问题 6. 编程式事务 1. 简介 编程式事务&#xff1a;指手动编写程序来管理事务&#xff0c;即通过编写代码的方式直接控制事务…...

Ubuntu 虚拟机环境,编译AOSP源码

环境 : VMware虚拟机 Ubuntu 20.04.3 LTS 搭建配置开发环境 sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl…...

2023.12.18杂记

今天特地搜了一下国内不错的博客网站&#xff0c;本来想在掘金上写的&#xff0c;但是怕被人喷&#xff08;&#xff0c;所以还是决定在csdn上写了哈哈哈。 这篇文章主要整理一下我今天写代码时遇到的疑惑以及记录一下思考过程吧。 第一个注意的地方&#xff0c;我们的get查询…...

智能优化算法应用:基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.阿基米德优化算法4.实验参数设定…...

K8s内容器拓扑图工具

1.背景&#xff1a;随着线上容器越来越多&#xff0c;需要一个可视化的方式展示各个容器之间的拓扑图。 2.需求&#xff1a;轻量级&#xff0c;部署方便。 3.部署 helm repo add groundcover https://helm.groundcover.com/ helm repo update helm install caretta --namespa…...