spring-cloud-starter-gateway-mvc的网关实现

一 概括

最近,我也一直在使用SpringCloudGateway开发我们自己的网关产品。根据我对这份正式文件的理解,内容如下:

SpringCloudGateway的默认底层依赖项是SpringWebflux。我们知道Spring Webflux是异步和响应式编程,并且编程范式是使用流范式编写的;

那么SpringCloudGateway支持同步网关吗?官方支持,官方网站提供了相应的解决方案,即将默认的底层Webflux切换到SpringMVC以支持同步;

相当于SpringCloudGateway为您提供了两种网关路由的底层实现,一种是对应于SpringWebflux的异步实现,另一种是与SpringMVC对应的同步实现。

二 spring-cloud-starter-gateway-mvc例子

1 pom.xml:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.winning.gate</groupId>
    <artifactId>mvc-gateway</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2023.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway-mvc</artifactId>
        </dependency>
    </dependencies>

</project>

2 application.yml:

yml 复制代码
server:
  port: 9098

3 com.demo.GatewaySampleApplication:

java 复制代码
package com.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author xch
 * 2023/12/15 16:56
 */
@SpringBootApplication
public class GatewaySampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewaySampleApplication.class, args);
    }

}

4 com.demo.SimpleGateway

java 复制代码
package com.demo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.function.RouterFunction;
import org.springframework.web.servlet.function.ServerResponse;

import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;

/**
 * @author xch
 * 2023/12/15 16:52
 */

@Configuration
class SimpleGateway {
    @Bean
    public RouterFunction<ServerResponse> getRoute() {
        return route().GET("/demo", http("http://localhost:8080/")).build();
    }
}

Above is all the code

5 Request Results

java 复制代码
GET http://localhost:9098/demo?ceshi=ceshi

HTTP/1.1 200 
date: Fri, 15 Dec 2023 09:23:37 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Keep-Alive: timeout=60
Connection: keep-alive

{
  "code": 0,
  "data": "ceshi"
}
Response file saved.
> 2023-12-15T172337.200.json

Response code: 200; Time: 19ms (19 ms); Content length: 25 bytes (25 B)

The destination service address of the route is in SimpleGateway, you can change it to your own service

相关推荐
步行cgn14 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
Raas1001 天前
AI网关厂商排名?MAI Gateway(魔芋企业级AI网关)vs 开源方案全面对比
人工智能·开源·gateway·ai网关·mai gateway·企业级ai网关·企业级产品
4SAPI1 天前
企业级 RAG 知识库问答大模型 API 生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
人工智能·gateway·agent·rag
步行cgn2 天前
Spring MVC POST 请求乱码:原因与完整解决方案
java·spring·mvc
JJJennie7772 天前
2026年大模型网关自建还是买?MAI Gateway等主流方案横评
人工智能·开源·gateway·ai网关
步行cgn3 天前
HTTP 请求协议详解
spring·mvc
MoRanzhi12033 天前
第3篇 · 使用 PyQt5 实现 2048 桌面版游戏:MVC 架构与撤销和重做
python·mvc·pyqt5·桌面应用开发·gui开发·2048游戏·撤销与重做
Raas1003 天前
2026年AI网关推荐?MAI Gateway(魔芋企业级AI网关)等主流方案横评
大数据·人工智能·ai·gateway·ai网关·mai gateway
4SAPI3 天前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
CoderYanger4 天前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc