SpringCloud集成微服务API网关Gateway(详解)

SpringCloud Gateway 统一网关实践

引言:

SpringCloud Alibaba 系列目录

一、搭建SpringCloud工程,请前往:保姆级教程构建SpringCloud工程(图文结合)
二、集成服务注册配置管理中心Nacos,请前往:SpringCloud集成服务注册配置管理中心Nacos
三、集成HTTP客户端工具OpenFeign,请前往:SpringCloud集成HTTP客户端工具OpenFeign
四、集成统一网关SpringCloud Gateway,请前往:SpringCloud集成微服务API网关Gateway(详解)

集成统一网关Gateway

1.为什么需要网关和其作用?

  • 路由转发: 网关可以作为所有客户端请求的入口,根据请求的URL路径将请求路由到相应的微服务实例。通过网关,可以将客户端请求分发到不同的微服务中,实现了微服务之间的解耦。
  • 负载均衡: 网关可以对请求进行负载均衡,将请求分发到多个相同服务的实例中。这样可以提高系统的性能和可用性,并且有效地利用了系统资源。
  • 安全认证: 网关可以作为安全认证的入口,对请求进行身份验证、授权和安全检查。通过网关,可以集中管理系统的安全策略,保护微服务免受未经授权的访问。
  • 流量控制: 网关可以实现流量控制进行限流,限制对微服务的访问速率,防止突发流量对系统造成影响。可以基于请求频率、并发连接数等指标对流量进行控制和限制。
  • 监控和日志: 网关可以记录所有的请求和响应信息,并且可以进行统一的监控和日志记录。这样可以方便开发人员进行故障排查、性能优化和系统分析。

2.技术实现

在SpringCloud中网关的实现有两种:

  • Gateway 实现
  • Zuul 实现

Zuul是基于Servlet的实现,属于阻塞式编程。

SpringCloud Gateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

3. 搭建网关服务

  1. 创建新的 cloud-gateway Module,引入SpringCloud Gateway的依赖及Nacos的服务注册与发现依赖

     <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>
        </dependencies>
    
  2. 在Gateway 的 resources 下新建 bootstrap.yml,配置路由和Nacos 服务注册与发现中心

    这里如果创建的是bootstrap.yml的话,一定要引入 bootstrap的依赖,不然是不会进行识别和加载的,也可以不引入 bootstrap依赖,直接创建application.yml也是可以的

            <!--bootstrap 启动器加载上下文-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bootstrap</artifactId>
            </dependency>
    
    

    网关路由配置的内容包括:

    • 路由Id:唯一的路由标识
    • uri:目标路由地址,支持http和lb两种
    • predicates:路由断言,判断请求是否符合规则,符合路由规则在进行转发到目标路由地址
    • filters:路由过滤器,处理请求或者响应
    # 服务端口
    server:
      port: 10717
    
    spring:
      application:
        # 服务名称
        name: gateway
      profiles:
        active: dev
      main:
        #   Description:
        #   Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway.
        #   Action:
        #   Please set spring.main.web-application-type=reactive or remove spring-boot-starter-web dependency.
        #上述错误表明 SpringBoot 与 SpringCloud Gateway 不兼容, 设置属性为reactive 告诉Spring Boot使用响应式Web应用程序类型,与Spring Cloud Gateway兼容。
        web-application-type: reactive  #
    
      cloud:
        nacos:
          # Nacos服务地址
          server-addr: localhost:8848
          # Nacos的服务注册与发现
          discovery:
            # Nacos服务地址
            #        server-addr: localhost:8848
            # 配置集群名称,也就是机房位置,例如:HZ 杭州
            cluster-name: HZ
            # Nacos可视化命名空间ID
            namespace: cdd2a801-3280-4476-8362-d46318aac1a3
    
        gateway:
          routes: # 网关路由配置
            
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧歌*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值