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

news2024/11/25 14:35:09

文章目录

  • 媒资管理模块 - 媒资项目搭建
  • 一、需求分析
    • 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-api
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project

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

spring:
  application:
    name: content-api
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project

当启动项目后,查看Nacos

image-20231217213430604

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

image-20231217213939392

2.2 配置中心

2.2.1 介绍

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

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

将项目中的配置文件分类

  • 每个项目特有的配置

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

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

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

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

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

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

    # 日志文件配置路径
    logging:
      config: classpath:log4j2-dev.xml
    
    # swagger 文档配置
    swagger:
      title: "学成在线系统管理"
      description: "系统管理接口"
      base-package: com.xuecheng.system
      enabled: true
      version: 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:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
  profiles:
    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:8848
      discovery: #服务发现(注册)配置
        namespace: dev
        group: xuecheng-plus-project
      config: #服务注册配置
         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.xml

swagger:
  title: "学成在线内容管理系统"
  description: "内容系统管理系统对课程相关信息进行管理"
  base-package: com.xuecheng.content
  enabled: true
  version: '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-project
         file-extension: yaml #文件后缀
         refresh-enabled: true
         extension-configs: # 扩展配置信息的引用
           #${spring.profiles.active} 这个写法就会找到此文件中spring.profiles.active对应的值
           - data-id: content-service-${spring.profiles.active}.yaml
             group: xuecheng-plus-project
             refresh: true

  profiles:
    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.xml

swagger:
  title: "学成在线内容管理系统"
  description: "内容系统管理系统对课程相关信息进行管理"
  base-package: com.xuecheng.content
  enabled: true
  version: '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.content
  enabled: true
  version: '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-api
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config: # 配置中心 
        namespace: dev #命名空间
        group: xuecheng-plus-project
        file-extension: yaml #文件后缀
        refresh-enabled: true # 当将 refresh 设置为 true 时,应用程序会定期从Nacos服务器获取配置并刷新已加载的配置
        extension-configs: # 扩展配置信息的引用
        #${spring.profiles.active} 这个写法就会找到此文件中spring.profiles.active对应的值
          - data-id: system-service-${spring.profiles.active}.yaml
            group: xuecheng-plus-project
            refresh: true
        shared-configs: #公用配置
          - data-id: swagger-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
          - data-id: logging-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
  profiles:
    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: /system
  port: 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.Driver
    url: jdbc:mysql://192.168.101.65:3306/xcplus_system?serverTimezone=UTC&userUnicode=true&useSSL=false&
    username: root
    password: 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.xml

swagger:
  title: "学成在线内容管理系统"
  description: "内容系统管理系统对课程相关信息进行管理"
  base-package: com.xuecheng.content
  enabled: true
  version: '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-project
        file-extension: yaml #文件后缀
        refresh-enabled: true
        extension-configs: # 扩展配置信息的引用
          #${spring.profiles.active} 这个写法就会找到此文件中spring.profiles.active对应的值
          - data-id: content-service-${spring.profiles.active}.yaml
            group: xuecheng-plus-project
            refresh: true
        shared-configs: #公用配置
          - data-id: swagger-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
          - data-id: logging-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
  profiles:
    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}.yaml
                group: xuecheng-plus-project
                refresh: true
    
  • 以共享配置文件 方式引入

    shared-configs: #公用配置
      - data-id: swagger-${spring.profiles.active}.yaml
        group: xuecheng-plus-common
        refresh: true
      - data-id: logging-${spring.profiles.active}.yaml
        group: xuecheng-plus-common
        refresh: 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-project
            file-extension: yaml #文件后缀
            refresh-enabled: true # 当将 refresh 设置为 true 时,应用程序会定期从Nacos服务器获取配置并刷新已加载的配置
            extension-configs: # 扩展配置信息的引用
              #${spring.profiles.active} 这个写法就会找到此文件中spring.profiles.active对应的值
              - data-id: content-service-${spring.profiles.active}.yaml
                group: xuecheng-plus-project
                refresh: true
            shared-configs: #公用配置
              - data-id: swagger-${spring.profiles.active}.yaml
                group: xuecheng-plus-common
                refresh: true
              - data-id: logging-${spring.profiles.active}.yaml
                group: xuecheng-plus-common
                refresh: true
      profiles:
        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: gateway
  cloud:
    #下面的配置是从Nacos拉取配置文件,并且要将服务上报到nacos
    nacos:
      server-addr: 192.168.101.65:8848
      discovery: #服务发现(服务配置)
        namespace: dev
        group: xuecheng-plus-project
      config: #服务配置
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
        shared-configs:
          - data-id: logging-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
  profiles:
    active: dev

3.4 Nacos配置网关路由策略

server:
  port: 63010 # 网关端口
spring:
  cloud:
    gateway:
#      filter:
#        strip-prefix:
#          enabled: true
      routes: # 网关路由配置
        - 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:8081
          uri: lb://system-api
          predicates:
            - Path=/system/**
#          filters:
#            - StripPrefix=1
        - id: media-api
          # uri: http://127.0.0.1:8081
          uri: lb://media-api
          predicates:
            - Path=/media/**
#          filters:
#            - StripPrefix=1

3.5 测试网关

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

image-20231218230440022

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

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

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

image-20231218231320893

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

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

image-20231218233729319

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

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

相关文章

基础算法(5):滑动窗口

1.何为滑动窗口&#xff1f; 滑动窗口其实也是一种算法&#xff0c;主要有两类&#xff1a;一类是固定窗口&#xff0c;一类是可变窗口。固定的窗口只需要一个变量记录&#xff0c;而可变窗口需要两个变量。 2.固定窗口 就像上面这个图一样。两个相邻的长度为4的红色窗口&…

HTML---CSS美化网页元素

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.div 标签&#xff1a; <div>是HTML中的一个常用标签&#xff0c;用于定义HTML文档中的一个区块&#xff08;或一个容器&#xff09;。它可以包含其他HTML元素&#xff0c;如文本、图像…

探秘 AJAX:让网页变得更智能的异步技术(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

如何编写好的测试用例?

对于软件测试工程师来说&#xff0c;设计测试用例和提交缺陷报告是最基本的职业技能。是非常重要的部分。一个好的测试用例能够指示测试人员如何对软件进行测试。在这篇文章中&#xff0c;我们将介绍测试用例设计常用的几种方法&#xff0c;以及如何编写高效的测试用例。 一、…

iPhone 17Pro/Max或升级4800万像素长焦镜头,配备自研Wi-Fi 7芯片。

iPhone 16未至&#xff0c;关于iPhone 17系列的相关消息就已经放出&#xff0c;到底是谁走漏了风声。 海通国际证券技术分析师Jeff Pu近日发布报告称&#xff0c;苹果将为2025年推出的iPhone 17ProMax配备4800万像素的长焦镜头。经调查&#xff0c;该分析师认为提升iPhone拍摄方…

如何在华为云上购买ECS及以镜像的方式部署华为云欧拉操作系统 (HCE OS)

写在前面 工作中遇到&#xff0c;简单整理博文内容为 华为云开发者认证 实验笔记https://edu.huaweicloud.com/certificationindex/developer/9bf91efb086a448ab4331a2f53a4d3a1理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在…

Nginx快速入门:Nginx应用场景、安装与部署(一)

1. Nginx简介 Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;也是一个非常流行的开源 Web 服务器软件。它是由俄罗斯程序员 Igor Sysoev 开发的&#xff0c;最初是为了解决在高并发场景下的C10k 问题&#xff08;即一个服务器进程只能处理 10,000 个并发连接&#x…

早期的OCR是怎么识别图片上的文字的?

现在的OCR技术融合了人工智能技术&#xff0c;通过深度学习&#xff0c;无论是识别的准确率还是效果都非常不错&#xff0c;那您知道在早期的OCR是通过什么技术来实现的吗&#xff1f;如果您不知道&#xff0c;那么&#xff0c;就让我来告诉您&#xff1a;它主要是基于字符的几…

DiffUtil + RecyclerView 在 Kotlin中的使用

很惭愧, 做了多年的Android开发还没有使用过DiffUtil这样解放双手的工具。 文章目录 1 DiffUtil 用来解决什么问题?2 DiffUtil 是什么?3 DiffUtil的使用4 参考文章 1 DiffUtil 用来解决什么问题? 先举几个实际开发中的例子帮助我们感受下: 加载内容流时,第一次加载了ABC,…

数据分析思维导图

参考&#xff1a; https://zhuanlan.zhihu.com/p/567761684?utm_id0 1、数据分析步骤地图 2、数据分析基础知识地图 3、数据分析技术知识地图 4、数据分析业务流程 5、数据分析师能力体系 6、数据分析思路体系 7、电商数据分析核心主题 8、数据科学技能书知识地图 9、数据挖掘…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《基于碳捕集-电转气的矿区综合能源系统协同优化调度》

这个标题涉及到碳捕集、电力转化为气体&#xff08;可能是指电力转化为氢气等&#xff09;、矿区综合能源系统以及协同优化调度等概念。让我们逐步解读&#xff1a; 碳捕集&#xff08;Carbon Capture&#xff09;&#xff1a; 这指的是通过不同技术手段捕获和隔离工业过程中产…

输电线路定位:精确导航,确保电力传输安全

在现代社会中&#xff0c;电力作为生活的基石&#xff0c;其安全稳定运行至关重要。而输电线路作为电力传输的重要通道&#xff0c;其故障定位和修复显得尤为重要。恒峰智慧科技将为您介绍一种采用分布式行波测量技术的输电线路定位方法&#xff0c;以提高故障定位精度&#xf…

新版Android Studio Logcat 筛选日志

下载了新版的Android Studio&#xff0c;android-studio-2022.3.1.21-mac_arm&#xff0c;记录一下新版本AS的logcat过滤日志条件 1. 按照包名过滤 1.1 过滤当前包名的日志 package:mine 1.2 过滤其他包名日志 package:com.example.firstemptyapplication 2. 按照日志等级过滤…

STM32与Freertos入门(三)任务的创建、删除

1、串口配置 首先将串口进行配置&#xff0c;后续经常会应用&#xff0c;具体步骤点击&#xff1a;串口配置。 2、任务 创建一个任务&#xff0c;就是开辟一个空间、每个任务中都会有while&#xff08;1&#xff09;死循环。 2.1相关函数 动态创建&#xff1a;xTaskCreate…

Github 2023-12-19开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-19统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目4Rust项目2非开发语言项目2C#项目1TypeScript项目1 Avalonia: 跨平台UI框架和Avalonia XPF 创建周…

20231218给Firefly的AIO-3399J【RK3399】开发板刷Android12挖掘机方案

20231218给Firefly的AIO-3399J【RK3399】开发板刷Android12挖掘机方案 2023/12/18 21:07 一、整体编译Rockchip的的Android12的挖掘机方案&#xff01; 由于RK3399的Android12系统默认是IND工业方案&#xff0c;需要修改一下【为挖掘机方案】。 Z:\3TB\81rk_android12_220722\…

鸿蒙端H5容器化建设——JSB通信机制建设

1. 背景 2023年鸿蒙开发者大会上&#xff0c;华为宣布为了应对国外技术封锁的潜在风险&#xff0c;2024年的HarmonyOS NEXT版本中将不再兼容Android&#xff0c;并推出鸿蒙系统以及其自研的开发框架&#xff0c;形成开发生态闭环。同时&#xff0c;在更高维度上华为希望将鸿蒙…

NVMe over CXL技术如何加速Host与SSD数据传输?

在现代计算环境中&#xff0c;优化Host&#xff08;主机&#xff09;与device&#xff08;设备&#xff09;之间的数据传输速度对于提升系统整体性能和效率至关重要。目前业内主要有以下几种方案&#xff1a; Controller Memory Buffer (CMB)&#xff1a; CMB是一种集成在NVMe …

Python数据科学视频讲解:Python数据缺失值处理

3.5 Python数据缺失值处理 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解3.5节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学应用的全流程&#xff0c;包括数据…

数据库增删改查Native SQL

DBCO&#xff1a;检查数据库是否连接 代码&#xff1a; 查询&#xff1a; DATA: gv_dbs TYPE char30 VALUE XXXXXXXX. "数据库连接名称 DATA:gt_ztclaim_2 TYPE TABLE OF ztclaim_2. DATA:gs_ztclaim_2 TYPE ztclaim_2.TRY.EXEC SQL.CONNECT TO :GV_DBSENDEXEC.EXEC SQ…