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
相关推荐
程序定小飞30 分钟前
基于springboot的学院班级回忆录的设计与实现
java·vue.js·spring boot·后端·spring
Ronin3051 小时前
【Linux网络】应用层协议HTTP
linux·网络·http·应用层协议
郝开2 小时前
Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
java·spring boot·spring
知兀3 小时前
【Spring/SpringBoot】SSM(Spring+Spring MVC+Mybatis)方案、各部分职责、与Springboot关系
java·spring boot·spring
早退的程序员3 小时前
记一次 Maven 3.8.3 无法下载 HTTP 仓库依赖的排查历程
java·http·maven
伊布拉西莫5 小时前
Spring 6.x HTTP interface 使用说明
spring·restclient
YDS8297 小时前
苍穹外卖 —— Spring Cache和购物车功能开发
java·spring boot·后端·spring·mybatis
Elieal7 小时前
Spring 框架核心技术全解析
java·spring·sqlserver
组合缺一7 小时前
(对标 Spring)OpenSolon v3.7.0, v3.6.4, v3.5.8, v3.4.8 发布(支持 LTS)
java·后端·spring·web·solon
♡喜欢做梦7 小时前
Spring IOC
java·后端·spring