spring gateway 配置http和websocket路由转发规则

1、转发http配置-普通方式

xml 复制代码
server:
  port: 8088
spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
        -id: url-proxy-1
          uri: https://blog.csdn.net
          predicates:
            -Path=/csdn

上面这段配置的意思是,配置了一个 id 为 url-proxy-1的URI代理规则,路由的规则为:

当访问地址 http://localhost:8088/csdn/123.jsp 时,会路由到地址 https://blog.csdn.net/123.jsp

字段说明
  • id:我们自定义的路由 ID,保持唯一
  • uri:目标服务地址
  • predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
  • path: 监听需要转发的地址,

2、转发http配置-使用注册中心地址

2.1、直接转发
xml 复制代码
server:
  port: 8088
spring:
  cloud:
    gateway:
      routes:
        - id: http1
          uri: "lb://serviceName" #http转发配置,通过nacos注册中心调用 serviceName
          predicates: 
            - Path=/**

其中 "lb://serviceName" 表示 使用注册中心的地址进行转发,lbloadbalancer的简写,lb://后面一定要填写正确的服务名称,是通过spring.application.name配置的名称,当然也可以直接写 serviceName;

注意: 当 Path 为/**,且uri为 "lb://serviceName" 时表示监听所有服务的地址进行路由转发

2.2、转发指定的path
复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: sdfsd
          uri: "lb:ws://blade-system"
          predicates:
            - Path=/blade-system/websocket/**
      discovery:
        locator:
          enabled: true
    loadbalancer:
      retry:
        enabled: true

假设2个服务的IP地址

  • spring gateway 的服务ip地址为:http://192.168.1.10:8000
  • blade-system服务的ip为:http://192.168.1.10:9000

当我访问 http://192.168.1.10:8000/blade-system/websocket/topic 时,会路由到 blade-system服务的地址: http://192.168.1.10:9000/websocket/topic

3、转发websocket配置

spring gatewat 默认情况下是不转发websocket请求的,所以需要我们自行配置转发规则;

xml 复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: http1
          uri: "ws://127.0.0.1:8081" #websocket配置,直接地址使用方式
          predicates: 
            - Path=/websocket_1
        - id: websocket1
          #uri: "lb:ws://serviceName" #websocket配置,通过nacos注册中心调用serviceName
          predicates: 
            - Path=/websocket_2

4、转发多个地址

因为routes本身就是个列表,转发多个就直接配置多个路由即可

复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: http1   # 配置第一个路由
          uri: "lb://serviceName" #http转发配置,通过nacos注册中心调用serviceName使用方式2
          predicates: 
            - Path=/**
        - id: websocket1 # 配置第二个路由
          uri: "lb:ws://serviceName" #websocket配置,通过nacos注册中心调用serviceName使用方式2
          predicates: 
            - Path=/websocket
相关推荐
一人の梅雨1 小时前
亚马逊 MWS 关键字 API 实战:关键字搜索商品列表接口深度解析与优化方案
python·spring
华仔啊1 小时前
Spring 配置混乱?搞懂这两个核心组件,问题真能少一半
java·后端·spring
喂完待续2 小时前
【序列晋升】45 Spring Data Elasticsearch 实战:3 个核心方案破解索引管理与复杂查询痛点,告别低效开发
java·后端·spring·big data·spring data·序列晋升
aloha_7892 小时前
新国都面试真题
jvm·spring boot·spring·面试·职场和发展
zzywxc7873 小时前
AI 行业应用:AI 在金融、医疗、教育、制造业等领域的落地案例
人工智能·spring·金融·prompt·语音识别·xcode
麦兜*3 小时前
Redis 7.0 新特性深度解读:迈向生产级的新纪元
java·数据库·spring boot·redis·spring·spring cloud·缓存
kimi7045 小时前
HTTP的持续与非持续连接,HTTP报文格式
网络·网络协议·http
会跑的葫芦怪7 小时前
Go语言net/http库使用详解
http·golang·iphone
太阳伞下的阿呆7 小时前
Http与WebSocket
websocket·网络协议·http
callJJ12 小时前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di