赞
踩
目录
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。 由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。
Spring Cloud 提供了 ConfigServer来解决这个问题,Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服 务应用的所有环境提供了一个中心化的外部配置。

一个使用微服务架构的应用系统可能会包括成百上千个微服务,配置各部相同,需求各不相同:
使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外 部属性配置。
SpringBoot 默认支持properties和YAML两种格式的配置文件。
bootstrap.yml 先于 application.yml 加载 !!!
1、添加依赖
- <!--config配置管理-->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-bootstrap</artifactId>
- </dependency>
2、添加bootsrap.yml配置
server: port: 8080 spring: application: name: basketball cloud: nacos: server-addr: localhost:8848 config: server-addr: ${spring.cloud.nacos.server-addr} #指定nacos配置中心地址 prefix: ${spring.application.name} file-extension: yaml # 使用的 nacos 配置集的 dataId 的文件拓展名,同时也是Nacos 配置集的配置格式,默认为 properties group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP # 共享配置集数组 shared-configs: - data-id: redis.yml group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP refresh: true # 是否自动刷新配置,默认为 fals - data-id: basketball.yml group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP refresh: true # 是否自动刷新配置,默认为 false # 使用的 nacos 的命名空间(指定项目环境), namespace: 363830b6-d72e-4868-a028-6be9c2cfd267
3、对应Nacos也添加配置信息

redis.yml:

basketball.yml:

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

5、编写测试接口类
- package com.example.basketball.controller;
-
- import com.example.basketball.config.EmailProperies;
- import com.example.basketball.config.RedisProperies;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
- import pojo.dto.IkunDto;
-
- import java.util.Map;
-
- @Slf4j
- @RestController
- @RequestMapping("/user")
- public class ConfigController {
-
- @Autowired
- private EmailProperies emailProperies;
- @Autowired
- private RedisProperies redisProperies;
-
- /*编写测试接口读取远程配置信息*/
- @RequestMapping("/test1")
- public Object test01() {
- return emailProperies;
- }
-
- @RequestMapping("/test2")
- public Object test02() {
- return redisProperies;
- }
-
- }

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

7、测试
这样我们就能将一些基本配置信息添加到Nacot进行远程配置管理,其实这里还有一个缺点:如果我们要个更换环境需要修改指定的nacos命名空间。
在这我们其实可以不写,把项目导成jar包,直接设置指定命名空间运行项目:
cmd指令示例:
java -jar xxx.jar --spring.cloud.nacos.config.namespace=xxx
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可以对请求和响应进行处理
创建网关服务:

添加依赖 :
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-webflux</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-gateway</artifactId>
- </dependency>
- <!--阿里json解析-->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.35</version>
- </dependency>
- </dependencies>

本地yml配置
- server:
- port: 8082
- spring:
- application:
- name: gateway
- cloud:
- nacos:
- server-addr: localhost:8848
- gateway:
- routes:
- #路由标识(id:标识,具有唯一性)配合读取类使用
- - id: user-basketball-api
- #目标服务地址(uri:地址,请求转发后的地址),会自动从注册中心获得服务的IP,不需要手动写死
- uri: lb://ikun
- #优先级,越小越优先
- order: 999
- #路由条件(predicates:断言)
- predicates:
- # 路径匹配,
- - Path=/kun/**
- filters:
- #路径前缀删除示例
- - StripPrefix=1

这样同时启动gateway和ikun(消费者)服务,通过网关端口8082路径kun就能访问ikun服务的接口方法。但是这样还是不太方便,建议使用方法二动态路由远程配置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。