SpringCloud 服务网关(GateWay) 、配置中心(Nacos)原理及代码实现

1. Spring Cloud 相关基础服务组件

  • 服务发现——Netflix Eureka (Nacos)
  • 服务调用——Netflix Feign
  • 熔断器——Netflix Hystrix
  • 服务网关——Spring Cloud GateWay
  • 分布式配置——Spring Cloud Config (Nacos)
  • 消息总线 —— Spring Cloud Bus (Nacos

2. Spring Cloud GateWay

2.1 简介

  • 在客户端和服务端中间有一面墙,可以起到作用很多,比如请求转发、负载均衡、权限控制等等;所有的外部请求都会先经过网关这一层;
  • Spring Cloud Gateway 旨在为微服务架构提供简单、有效和统一的API路由管理方式;
  • Spring Cloud 几个重要名词:路由断言过滤器
  • 负载均衡的方式:轮询、权重、最少响应时间

2.2 Idea 实现

  • 引入依赖 pom.xml
    <dependencies>
        <dependency>
            <groupId>com.atguigu</groupId>
            <artifactId>common_utils</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

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

        <!-- 网关核心依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!--gson-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>

        <!--服务调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
  • 启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ApiGatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(ApiGatewayApplication.class, args);
    }
}
  • 配置文件 application.properties
# 服务端口
server.port=8222
# 服务名
spring.application.name=service-gateway
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true

#设置路由id
spring.cloud.gateway.routes[0].id=service-acl
#设置路由的uri   lb://nacos注册服务名称
spring.cloud.gateway.routes[0].uri=lb://service-acl
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= Path=/*/acl/**

#配置service-edu服务
spring.cloud.gateway.routes[1].id=service-edu
spring.cloud.gateway.routes[1].uri=lb://service-edu
spring.cloud.gateway.routes[1].predicates= Path=/eduservice/**

#配置service-edu服务
spring.cloud.gateway.routes[2].id=service-msm
spring.cloud.gateway.routes[2].uri=lb://service-msm
spring.cloud.gateway.routes[2].predicates= Path=/edumsm/**

项目中,所有的微服务端口都可以通过 localhost:8022 端口访问

3. 配置中心(Nacos)

3.1 简介

如果微服务架构中没有使用统一配置中心时,所存在的问题:

  • 配置文件分散在各个项目里,不方便维护
  • 配置内容安全与权限
  • 更新配置后,项目需要重启

Nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。

3.2 读取配置中心的配置文件

  • 在Nacos 中创建配置文件
    在这里插入图片描述

  • 命名规则:service-edu-dev.properties
    在这里插入图片描述

  • 3、springboot 配置文件加载顺序

      - 这里主要是说明application和bootstrap的加载顺序。
      - bootstrap.yml(bootstrap.properties)先加载
      - application.yml(application.properties)后加载
      - bootstrap.yml 用于应用程序上下文的引导阶段。
      - bootstrap.yml 由父Spring ApplicationContext加载。
      - 父ApplicationContext 被加载到使用 application.yml 的之前。
    
  • 在Idea 中引入依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>
  • 创建 bootstrap.properties 配置文件
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.profiles.active=dev

# 该配置影响统一配置中心中的dataId
spring.application.name=service-statistics

3.3 名称空间切换环境

  • 创建命名空间(开发环境 dev、测试环境 test、生产环境 prod)
    在这里插入图片描述

3.4 获取多配置文件

在这里插入图片描述

  • Idea 配置文件
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.profiles.active=dev

# 该配置影响统一配置中心中的dataId
spring.application.name=service-statistics

spring.cloud.nacos.config.namespace=fffcbc78-504b-4cae-b9a2-3f50e0c2c4ef

spring.cloud.nacos.config.ext-config[0].data-id=port.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
spring.cloud.nacos.config.ext-config[0].refresh=true
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要基于Nacos实现Spring Cloud Gateway的动态网关路由,可以按照以下步骤进行操作: 1. 添加依赖:在Spring Cloud Gateway项目的pom.xml文件中添加相应的依赖,包括spring-cloud-starter-gatewayspring-cloud-starter-alibaba-nacos-discovery等。 2. 配置Nacos注册中心:在application.properties或application.yml配置文件中添加Nacos注册中心的相关配置,包括Nacos服务器地址、命名空间、分组等信息。 3. 配置动态路由:创建一个RouteLocator Bean,并在其中使用Nacos服务发现来定义动态路由规则。可以通过Nacos配置中心来管理路由规则的动态更新。 ```java @Configuration public class GatewayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("service_route", r -> r.path("/api/v1/**") .uri("lb://service-provider")) .build(); } } ``` 上述示例中,定义了一个名为service_route的路由规则,将请求路径以/api/v1/开头的请求转发到名为service-provider的微服务上。 4. 启动Gateway应用:启动Spring Cloud Gateway应用,它会自动从Nacos注册中心获取动态路由规则并进行路由转发。 5. 管理动态路由:使用Nacos配置中心来管理动态路由规则。可以通过Nacos的控制台或API来添加、修改或删除路由规则,Gateway应用会自动更新并生效。 通过以上步骤,就可以基于Nacos实现Spring Cloud Gateway的动态网关路由了。你可以根据实际需求和业务场景,添加更多的路由规则和配置。希望对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值