当前位置:   article > 正文

【SpringCloud Alibaba】Nacos Config配置管理与Gateway 网关

【SpringCloud Alibaba】Nacos Config配置管理与Gateway 网关

目录

一、Config 远程配置

1.1 config 介绍

1.2 bootstrap.yml 配置文件

二、Gateway 网关

2.1 gateway 介绍

2.2 gateway 使用

2.2.1 方式一

2.2.2 方式二(动态路由)


一、Config 远程配置

1.1 config 介绍

        微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。 由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。

        Spring Cloud 提供了 ConfigServer来解决这个问题,Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服 务应用的所有环境提供了一个中心化的外部配置。

一个使用微服务架构的应用系统可能会包括成百上千个微服务,配置各部相同,需求各不相同:

  • 不同环境不同配置:例如数据源在不同的环境(开发,测试,生产)是不同的
  • 运行期间可以动态调整。例如根据各个微服务的负载状况,动态调整数据源连接池大小或者熔断阀 值,并且调整时不停止微服务(配置修改后可以自动更新)

        使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外 部属性配置。 

1.2 bootstrap.yml 配置文件

SpringBoot 默认支持propertiesYAML两种格式的配置文件。

  1. bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等
  2. application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用 的公共参数等。

bootstrap.yml 先于 application.yml 加载 !!!

1、添加依赖

  1. <!--config配置管理-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-bootstrap</artifactId>
  9. </dependency>

2、添加bootsrap.yml配置

  1. server:
  2. port: 8080
  3. spring:
  4. application:
  5. name: basketball
  6. cloud:
  7. nacos:
  8. server-addr: localhost:8848
  9. config:
  10. server-addr: ${spring.cloud.nacos.server-addr}
  11. #指定nacos配置中心地址
  12. prefix: ${spring.application.name}
  13. file-extension: yaml # 使用的 nacos 配置集的 dataId 的文件拓展名,同时也是Nacos 配置集的配置格式,默认为 properties
  14. group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
  15. # 共享配置集数组
  16. shared-configs:
  17. - data-id: redis.yml
  18. group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
  19. refresh: true # 是否自动刷新配置,默认为 fals
  20. - data-id: basketball.yml
  21. group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
  22. refresh: true # 是否自动刷新配置,默认为 false
  23. # 使用的 nacos 的命名空间(指定项目环境),
  24. namespace: 363830b6-d72e-4868-a028-6be9c2cfd267

3、对应Nacos也添加配置信息

redis.yml:

basketball.yml:

4、编写两个配置类读取Nacos配置文件属性值

5、编写测试接口类

  1. package com.example.basketball.controller;
  2. import com.example.basketball.config.EmailProperies;
  3. import com.example.basketball.config.RedisProperies;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.*;
  7. import pojo.dto.IkunDto;
  8. import java.util.Map;
  9. @Slf4j
  10. @RestController
  11. @RequestMapping("/user")
  12. public class ConfigController {
  13. @Autowired
  14. private EmailProperies emailProperies;
  15. @Autowired
  16. private RedisProperies redisProperies;
  17. /*编写测试接口读取远程配置信息*/
  18. @RequestMapping("/test1")
  19. public Object test01() {
  20. return emailProperies;
  21. }
  22. @RequestMapping("/test2")
  23. public Object test02() {
  24. return redisProperies;
  25. }
  26. }

6、启动类添加刷新配置注解

7、测试

        这样我们就能将一些基本配置信息添加到Nacot进行远程配置管理,其实这里还有一个缺点:如果我们要个更换环境需要修改指定的nacos命名空间在这我们其实可以不写,把项目导成jar包,直接设置指定命名空间运行项目:

cmd指令示例:

java -jar xxx.jar --spring.cloud.nacos.config.namespace=xxx

二、Gateway 网关

2.1 gateway 介绍

        Spring Cloud Gateway是Spring官方基于Spring5.0、SpringBoot2.0和Project Reactor等技术开发的网关,旨在为微服务框架提供一种简单而有效的统一的API路由管理方式,统一访问接口。

        Spring Cloud Gateway作为Spring Cloud生态体系中的网关,目标是替代Netflix的Zuul,其不仅提供统 一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等等。 它是基于Netty的响应式开发模式。

1️⃣路由(route):路由是网关最基础的部分,路由信息由一个ID,一个目的URL、一组断言predicates)工厂和一 组Filter组成。如果断言为真,则说明请求URL和配置的路由匹配。

2️⃣断言(Predicate):Java8中的断言函数,Spring Cloud Gateway中的断言函数输入类型是 Spring5.0框架中的ServerWebExchange。Spring Cloud Gateway中的断言函数允许开发者去定义匹配 来自http Request中的任何信息,比如请求头和参数等。

3️⃣过滤器(Filter):一个标准的Spring WebFilter,Spring Cloud Gateway中的Filter分为两种类型: Gateway Filter和Global Filter。过滤器Filter可以对请求和响应进行处理

2.2 gateway 使用

创建网关服务:

添加依赖 :

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-webflux</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-gateway</artifactId>
  9. </dependency>
  10. <!--阿里json解析-->
  11. <dependency>
  12. <groupId>com.alibaba</groupId>
  13. <artifactId>fastjson</artifactId>
  14. <version>1.2.35</version>
  15. </dependency>
  16. </dependencies>

2.2.1 方式一

本地yml配置

  1. server:
  2. port: 8082
  3. spring:
  4. application:
  5. name: gateway
  6. cloud:
  7. nacos:
  8. server-addr: localhost:8848
  9. gateway:
  10. routes:
  11. #路由标识(id:标识,具有唯一性)配合读取类使用
  12. - id: user-basketball-api
  13. #目标服务地址(uri:地址,请求转发后的地址),会自动从注册中心获得服务的IP,不需要手动写死
  14. uri: lb://ikun
  15. #优先级,越小越优先
  16. order: 999
  17. #路由条件(predicates:断言)
  18. predicates:
  19. # 路径匹配,
  20. - Path=/kun/**
  21. filters:
  22. #路径前缀删除示例
  23. - StripPrefix=1

        这样同时启动gateway和ikun(消费者)服务,通过网关端口8082路径kun就能访问ikun服务的接口方法。但是这样还是不太方便,建议使用方法二动态路由远程配置

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/40945
推荐阅读