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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/231616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转Docker(六):数据挂载与共享

文章目录 〇、Docker的两种存放数据的资源1.Storage Driver2.Data Volume3.使用场景 一、使用Data Volume1.-v <host_path>:<container_path>2.-v <container_path>挂载匿名卷 二、数据共享1.容器和主机之间共享2.容器之间共享(1)方法一&#xff1a;-v非匿名…

Spark编程实验二:RDD编程初级实践

目录 一、目的与要求 二、实验内容 三、实验步骤 1、pyspark交互式编程 2、编写独立应用程序实现数据去重 3、编写独立应用程序实现求平均值问题 4、三个综合实例 四、结果分析与实验体会 一、目的与要求 1、熟悉Spark的RDD基本操作及键值对操作&#xff1b; 2、熟悉使…

Linux-----21、挂载

# 挂载命令 将硬件资源&#xff0c;或文件资源&#x1f4bf;&#xff0c;和&#x1f4c2;空目录&#x1f517;连接起来的过程 # mount linux 所有存储设备都必须挂载使用&#xff0c;包括硬盘 ​ 命令名称&#xff1a;mount ​ 命令所在路径&#xff1a;/bin/mount ​ 执行…

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

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

如何让32位.Net 应用打开3G开关

昨天刚分享了《如何让.NET应用使用更大的内存》&#xff0c;结果就有同学说&#xff0c;<最好加一下32位如何开启大内存&#xff0c;因为很多传统项目32位&#xff0c;实在迁移不动了>&#xff0c;那么&#xff0c;我就验证了一些可行的方案&#xff0c;发现都挺简单的。…

内网安全—Windows系统内核溢出漏洞提权

系统内核溢出漏洞提权 往缓冲区中写入超出限定长度的内容&#xff0c;造成缓冲区溢出&#xff0c;从而破坏程序的堆栈进而运行自己精心准备的指定代码&#xff0c;达到攻击的目的。 分类&#xff1a; 堆溢出 栈溢出 查找补丁的方法 1、手工查找补丁情况 systeminfo Wmic qfe…

Semaphore学习一

一、定义 是JUC包下的一个工具类&#xff0c;我们可以通过其限制执行的线程数量&#xff0c;达到限流的效果。 当一个线程执行时先通过其方法进行获取许可操作&#xff0c;获取到许可的线程继续执行业务逻辑&#xff0c;当线程执行完成后进行释放许可操作&#xff0c;未获取达到…

Python 全栈体系【四阶】(七)

第四章 机器学习 六、多项式回归 1. 什么是多项式回归 线性回归适用于数据呈线性分布的回归问题。如果数据样本呈明显非线性分布&#xff0c;线性回归模型就不再适用&#xff08;下图左&#xff09;&#xff0c;而采用多项式回归可能更好&#xff08;下图右&#xff09;。例…

数据安全传输基础设施平台(二)

5安全传输平台总体设计 5.1 方案特点 规范化&#xff1a;严格遵循各种相关规范设计。独立性&#xff1a;系统各子系统间互相独立&#xff0c;在保持系统间接口的前提下&#xff0c;各系统间的升级互不干扰。最小耦合性&#xff1a;各子系统进行严格功能分解&#xff0c;每个子…

PCL点云处理之点云置平(拟合平面绕中心旋转到绝对水平)(二百二十七)

PCL点云处理之点云置平(绕中心旋转到绝对水平)(二百二十七) 一、什么是点云置平二、算法流程三、算法实现一、什么是点云置平 有时候,我们处理的点云平面并非位于水平面,而是位于某个任一三维平面上,而大多数算法又只能在水平面处理,或者水平面的点云处理是相对更简单…

P2P应用

目录 一.P2P的简介 二.P2P的工作方式 1.具有集中目录服务器的P2P工作方式 2.具有全分布式结构的P2P文件共享程序 一.P2P的简介 P2P(对等连接)&#xff0c;是指两台主机在通信时&#xff0c;并不区分哪一个是服务请求方和哪一个是服务提供方。只要两台主机都运行了对等连接…

人工智能_机器学习069_SVM支持向量机_网格搜索_交叉验证参数优化_GridSearchCV_找到最优的参数---人工智能工作笔记0109

然后我们再来说一下SVC支持向量机的参数优化,可以看到 这次我们需要,test_data这个是测试数据,容纳后 train_data这个是训练数据 这里首先我们,导出 import numpy as np 导入数学计算包 from sklearn.svm import SVC 导入支持向量机包 分类器包 def read_data(path): wit…

从事开发近20年,经历过各种技术的转变和进步

1、jsp、javabean、servlet、jdbc。 2、Struts1、hibernate、spring。 3、webwork、ibatis、spring 4、Struts2、mybatis、spring 5、spring mvc &#xff0c;spring全家桶 6、dubbo&#xff0c;disconf 微服务&#xff0c;soa 7、springboot 全家桶 8、docker 9、dock…

AXure的情景交互

目录 导语&#xff1a; 1.erp多样性登录界面 2.主页跳转 3.省级联动​编辑 4. 下拉加载 导语&#xff1a; Axure是一种流行的原型设计工具&#xff0c;可以用来创建网站和应用程序的交互原型。通过Axure&#xff0c;设计师可以创建情景交互&#xff0c;以展示用户与系统的交…

力扣题目学习笔记(OC + Swift) 14. 最长公共前缀

14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 方法一 竖向扫描法 个人感觉纵向扫描方式比较直观&#xff0c;符合人类理解方式&#xff0c;从前往后遍历所有字符串的每一列&#xff0c;比较相同列上的…

出国旅游需要注意些什么

出国旅游是一种令人兴奋、令人期待的经历。然而&#xff0c;在进行这种经历之前&#xff0c;有几件事情是需要注意的。本文将为您介绍出国旅游需要注意的一些重要事项。首先&#xff0c;为了确保您的出国旅行顺利进行&#xff0c;您应该提前办理好您的签证和护照。不同国家对于…

Idea远程debugger调试

当我们服务部署在服务器上&#xff0c;我们想要像在本地一样debug,就可以使用idea自带的Remote JVM Debug 创建Remote JVM Debug服务器启动jar打断点进入断点 当我们服务部署在服务器上&#xff0c;我们想要像在本地一样debug,就可以使用idea自带的 Remote JVM Debug) 创建Rem…

flask搞个简单登录界面

登录界面 直接放上login.html模板&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Lo…

JVM-11-运行时栈帧结构

“栈帧”&#xff08;Stack Frame&#xff09;则是用于支持虚拟机进行方法调用和方法执行背后的数据结构&#xff0c;它也是虚拟机运行时数据区中的虚拟机栈&#xff08;Virtual MachineStack&#xff09;的栈元素。 栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回…

docker在线安装nginx

1、查看所有镜像 1、不带容器卷常规启动nginx&#xff0c;命令如下 docker run --name nginx-test -p 8089:80 -d a6bd71f48f68 2、在宿主机创建/usr/local/data/nginxdocker/目录&#xff0c;在此目录下创建html和logs文件夹&#xff0c;然后将容器内的 nginx.conf 和 html 下…