SpringCloud网关-gateway

一 什么是网关?为什么选择 Gateway?

网关功能如下:

  1. 身份认证和权限校验
  2. 服务路由、负载均衡
  3. 请求限流

在 Spring Cloud 中网关的实现包含两种:

  1. Gateway(推荐):是基于 Spring5 中提供的 WebFlux ,属于响应式编程的实现,具备更好的性能,因此作为比较推荐实现网关的方式。
  2. Zuul:是基于 Servlet 的实现,属于阻塞式编程

Gateway 网关

主要分为以下几个步骤:

1 创建新的module-gateway

引入SpringCloudGateway的依赖和nacos的服务发现依赖:

java 复制代码
<!--网关依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> 
</dependency>

高版本错误:

a)如果使用的是 springcloud高版本(例如 2020.1.0),那么 gateway 中的 ribbon 负载均衡已经被剔除了,因此需要引入 springcloud loadbalencer 作为 gateway 的负载均衡.

java 复制代码
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

b)引入此依赖后,可能还会报 cache 的警告,引入一下两个依赖即可

java 复制代码
        <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>caffeine</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>

2 编写nacos地址和路由配置

java 复制代码
server:
  port: 10010 # 网关端口
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos 地址
    gateway:
      routes:  # 网关路由配置
        - id: user-service # 路由 id,自定义,只要唯一即可
          uri: lb://userservice # 路由的目标地址 lb 就是负载均衡,后面跟微服务名
          predicates: #路由断言
            - Path=/user/** # 这个是按照路径匹配,只要以 /user/ 开头就符合要求
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**

路由配置解释如下:

  1. 路由id:路由的唯一标示(自定义)
  2. 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡
  3. 路由断言(predicates):路由的规则(匹配的才被 gateway 拦截下来).
  4. 路由过滤器(filters):对请求或响应做处理,例如 StripProfix 就是去掉指定数量的前缀路由,例如请求是 api/user/login,filters 处理为 StripProfix = 1(去掉一个前缀),那么处理后请求就是 /user/login.

3 效果展示

出现下述结果展示,说明路由转发成功.

相关推荐
南朝雨21 小时前
Spring Boot Admin日志监控坑点:远程配置的logging.file.name为何生效又失效?
java·spring boot·spring cloud·微服务·logback
深入技术了解原理1 天前
eureka-client依赖爆红无法下载
spring cloud·云原生·eureka
ZePingPingZe1 天前
深入理解网络模型之Spring Cloud微服务通信、Socket、HTTP与RPC
网络协议·spring cloud·rpc·dubbo
叫码农就行1 天前
spring cloud 笔记
java·笔记·spring cloud
七夜zippoe1 天前
微服务架构演进实战 从单体到微服务的拆分原则与DDD入门
java·spring cloud·微服务·架构·ddd·绞杀者策略
Leo July2 天前
【Java】Spring Cloud 微服务生态全解析与企业级架构实战
java·spring cloud
一条咸鱼_SaltyFish2 天前
WebFlux vs MVC:Gateway集成若依框架的技术选型之争
java·开发语言·微服务·gateway·mvc·开源软件·webflux
李慕婉学姐2 天前
【开题答辩过程】以《基于springcloud的空气质量监控管理系统》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
后端·spring·spring cloud
CV_J2 天前
安装kibana
java·elasticsearch·spring cloud·docker·容器
小马爱打代码3 天前
实时搜索:SpringCloud + Elasticsearch + Redis + Kafka
redis·elasticsearch·spring cloud