当前位置: 首页 > article >正文

[ Spring ] Spring Cloud Gateway 2025 Comprehensive Overview

文章目录

          • Spring Gateway Architecture
          • Project Level Dependency
          • Service Center
          • Service Provider
          • Gateway Service
          • Launch All Service

Spring Gateway Architecture
  • Service Center : register and find service provider
  • Service Provider : programs that provide actual service
  • Gateway Service : dispatch client requests to service providers

data flow : request => gateway => service center => service provider

Project Level Dependency
pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

dependencyResolutionManagement {
    repositoriesMode = RepositoriesMode.PREFER_SETTINGS
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

buildscript {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

plugins {
    id("org.jetbrains.kotlin.jvm") version "2.0.21" apply false
    id("org.jetbrains.kotlin.kapt") version "2.0.21" apply false
    id("org.jetbrains.kotlin.plugin.spring") version "2.0.21" apply false
    id("org.springframework.boot") version "3.4.1" apply false
}

include("eureka-server")
include("spring-gateway-service")
include("spring-gateway-provider")
Service Center
plugins {
    id("org.jetbrains.kotlin.jvm")
    id("org.jetbrains.kotlin.kapt")
    id("org.jetbrains.kotlin.plugin.spring")
    id("org.springframework.boot")
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

dependencies {
    // commons
    api("io.github.hellogoogle2000:kotlin-commons:1.0.19")
    // kotlin
    api("org.jetbrains.kotlin:kotlin-reflect:2.0.21")
    // spring
    api("org.springframework.boot:spring-boot-starter:3.4.1")
    api("org.springframework.boot:spring-boot-starter-web:3.4.1")
    api("org.springframework.boot:spring-boot-devtools:3.4.1")
    // eureka
    api("org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:4.2.0")
}
# service
server.port=10001
spring.application.name=eureka-server
# eureka
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/
package x.spring.hello

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
class EurekaServerApplication

fun main(args: Array<String>) {
    runApplication<EurekaServerApplication>(*args)
}
Service Provider
plugins {
    id("org.jetbrains.kotlin.jvm")
    id("org.jetbrains.kotlin.kapt")
    id("org.jetbrains.kotlin.plugin.spring")
    id("org.springframework.boot")
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

dependencies {
    // commons
    api("io.github.hellogoogle2000:kotlin-commons:1.0.19")
    // kotlin
    api("org.jetbrains.kotlin:kotlin-reflect:2.0.21")
    // spring
    api("org.springframework.boot:spring-boot-starter:3.4.1")
    api("org.springframework.boot:spring-boot-starter-web:3.4.1")
    // eureka
    api("org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:4.2.0")
}
# service
server.port=10003
spring.application.name=gateway-provider
# eureka
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/
package x.spring.hello

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class GatewayProviderApplication

fun main(args: Array<String>) {
    runApplication<GatewayProviderApplication>(*args)
}
package x.spring.hello.controller

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RestController

@RestController
class ConfigController {

    @GetMapping("/config/{key}")
    fun index(@PathVariable("key") key: String): String {
        return "config service provider on 10003 key=$key"
    }
}
Gateway Service
plugins {
    id("org.jetbrains.kotlin.jvm")
    id("org.jetbrains.kotlin.kapt")
    id("org.jetbrains.kotlin.plugin.spring")
    id("org.springframework.boot")
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

dependencies {
    val springBootVersion = "3.4.1"
    val springCloudVersion = "4.2.0"
    // commons
    api("io.github.hellogoogle2000:kotlin-commons:1.0.19")
    // kotlin
    api("org.jetbrains.kotlin:kotlin-reflect:2.0.21")
    // spring
    api("org.springframework.boot:spring-boot-starter:$springBootVersion")
    api("org.springframework.boot:spring-boot-devtools:$springBootVersion")
    api("org.springframework.cloud:spring-cloud-starter-bootstrap:$springCloudVersion")
    // spring cloud gateway
    api("org.springframework.boot:spring-boot-starter-webflux:$springBootVersion")
    api("org.springframework.cloud:spring-cloud-starter-gateway:$springCloudVersion")
    api("org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:$springCloudVersion")
    api("javax.servlet:javax.servlet-api:4.0.1")
}
# service
server.port=10002
spring.application.name=gateway-service
# eureka
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/
# gateway
spring.cloud.gateway.routes[0].id=config
spring.cloud.gateway.routes[0].uri=lb://gateway-provider
spring.cloud.gateway.routes[0].predicates[0]=Path=/config/**
# http://localhost:10002/config/name => http://localhost:10003/config/name
package x.spring.hello

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class GatewayServiceApplication

fun main(args: Array<String>) {
    runApplication<GatewayServiceApplication>(*args)
}
package x.spring.hello.component

import org.springframework.cloud.gateway.route.RouteLocator
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder
import org.springframework.cloud.gateway.route.builder.filters
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class GatewayRule {

    @Bean
    fun rule(builder: RouteLocatorBuilder): RouteLocator {
        val routes = builder.routes()
        // http://localhost:10002/github/byteflys => https://github.com/byteflys
        routes.route("csdn") { route ->
            route.filters {
                rewritePath("/github/(?<variable>.*)", "/\${variable}")
            }
            route.path("/github/**").uri("https://github.com/")
        }
        return routes.build()
    }
}
Launch All Service
http://localhost:10001
http://localhost:10003/config/name
http://localhost:10002/config/name => http://localhost:10003/config/name
http://localhost:10002/github/byteflys => https://github.com/byteflys

http://www.kler.cn/a/515874.html

相关文章:

  • 阴沟翻船题——Longest Substring Without Repeating Characters
  • 【深度学习】1.深度学习解决问题与应用领域
  • ubuntu24 springboot jar设置宕机重启
  • Unity新版InputSystem短按与长按,改键的实现
  • [答疑]这个消息名是写发送数据还是接收数据
  • STM32 FreeRTOS 任务挂起和恢复---实验
  • ESP32C3使用Audiuno搭建开发环境入门
  • 智慧农业——温湿,土壤,风速风向,降雨量 传感器监视平台
  • 单路由及双路由端口映射指南
  • Objective-C语言的计算机基础
  • 【0x0012】HCI_Delete_Stored_Link_Key命令详解
  • MFC结构体数据文件读写
  • 【JavaEE】Spring(3):IoC和DI
  • C#单点登录(SSO):解锁高效访问的密码
  • 汇编实验·子程序、分支、循环综合设计
  • 初识Netty(使用Netty实现服务端与客户端)
  • AWScurl笔记
  • 【Java设计模式-7】责任链模式:我是流水线的一员
  • No.37 笔记 | Python面向对象编程学习笔记:探索代码世界的奇妙之旅
  • 2.5英寸笔记本电脑机械硬盘拆解方法
  • vim查找如何忽略字母的大小写
  • Java算法——排序
  • PHP如何封装项目框架达到高可用、高性能、高并发
  • 嵌入式知识点总结 C/C++ 专题提升(七)-位操作
  • 精讲Python之turtle库(二):设置画笔颜色、回旋伞、变色回旋伞、黄色三角形、五角星,附源代码
  • python列表增加数据函数