论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
在SpringCloud2023中快速集成SpringCloudGateway网关 ...
在SpringCloud2023中快速集成SpringCloudGateway网关
罪恶克星
金牌会员
|
2024-5-19 13:04:40
|
显示全部楼层
|
阅读模式
楼主
主题
870
|
帖子
870
|
积分
2610
你好,这里是codetrend专栏“SpringCloud2023实战”。
本文主要简单介绍SpringCloud2023实战中SpringCoudGateway的搭建。
后续的文章将会介绍在微服务中使用熔断Sentinel、鉴权OAuth2、SSO等技能。
前言
网关的选型不多,目前spring支持和维护的项目是 Spring Cloud Gateway。
Spring Cloud Gateway作为一个轻量级、高性能、可定制的网关服务,具有与Spring生态系统的紧密集成、负载平衡、断路器等丰富的功能,适用于构建微服务架构中的网关层,提供统一的访问控制、路由转发和过滤处理等功能。
Gateway 具有以下优点:
高度可定制性
:Spring Cloud Gateway采用了一种基于过滤器链的方式来处理请求,可以根据实际需求自定义过滤器,实现对请求的各个环节进行精致化控制和处理。这种可定制性使得开辟职员可以根据具体业务场景快速构建符合需求的网关。
集成简单
:Spring Cloud Gateway与Spring生态系统紧密集成,特别是与Spring Boot结合使用时,可以充实使用Spring Boot的自动设置和约定大于设置的特性,简化了网关的设置和部署过程。同时,它也与其他Spring Cloud组件(如Eureka、Ribbon、Hystrix等)无缝集成,提供了美满的微服务管理能力。
轻量高性能
:Spring Cloud Gateway基于Reactor和WebFlux框架,采用非阻塞的异步编程模型,相比传统的Servlet容器,具有更好的性能和吞吐量。它还支持响应式编程风格,可以大概处理大量并发请求,并通过异步IO模型提供更低的延迟。
内置负载平衡
:Spring Cloud Gateway内置了负载平衡功能,可以根据服务实例的健康状态和负载情况自动进行请求的负载平衡。通过与服务注册中央集成,可以动态地发现和管理服务实例,实现智能路由和负载平衡。
支持断路器
:Spring Cloud Gateway集成了Hystrix,可以通过设置断路器模式来保护后端服务免受故障的影响。当后端服务出现故障或超时时,可以快速失败并返回预定义的错误响应,提高系统的稳固性和容错能力。
动态路由
:Spring Cloud Gateway支持动态路由设置,可以根据需要动态添加、删除或修改路由规则,而无需重启网关服务。这种动态路由的特性使得系统更具灵活性和可扩展性,可以大概快速顺应业务需求的变化。
前置条件
网关和服务提供者都需要集成注册中央,方便使用负载平衡。
使用JDK17+,这也是SpringBoot3的最低要求。
Gateway如何工作的
这张图大概说明了网关如何工作的。
客户端向 Spring Cloud Gateway 发送请求。如果网关处理器映射确定请求匹配某个路由,则将其发送到网关 Web 处理器。该处理器将请求通过特定于请求的过滤器链。
过滤器被分为前后两部分,原因是过滤器可以在署理请求发送之前和之后运行逻辑。
所有前置过滤器逻辑都会被执行。然后发出署理请求。署理请求发出后,将运行后置过滤器逻辑。
Gateway集成
引入pom.xml
引入Gateway主要是引入 spring-cloud-starter-gateway 。
同时需要集成注册中央,以实现服务调用的负载平衡。
<?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">
<parent>
<groupId>io.rainforest</groupId>
<artifactId>banana</artifactId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>banana-gateway</artifactId>
<description>spring cloud gateway</description>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>io.rainforest</groupId>
<artifactId>banana-common-core</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
复制代码
修改设置
新增设置文件 application.yml,网关设置主要是 spring.cloud.gateway 下面的设置。
spring.application.name: gateway
spring:
cloud:
zookeeper:
connect-string: localhost:2181
gateway:
discovery:
locator:
enabled: false
lowerCaseServiceId: true
routes:
- id: client1
uri: lb://client1
predicates:
- Path=/client1/**
# filters:
# - StripPrefix=0
- id: client2
uri: lb://client2
predicates:
- Path=/client2/**
filters:
- StripPrefix=0
- id: client3
uri: lb://client3
predicates:
- Path=/client3/**
filters:
- StripPrefix=0
server:
port: 10100
servlet:
context-path: /gateway
复制代码
spring.cloud.gateway.routes 设置不同的服务路由。
修改启动类
启动类不需要特殊修改。
package io.rainforest.banana.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
复制代码
调用demo
不需要修改代码就可以开箱即用Gateway。此处仅展示如何调用。
实际情况中网关还需要使用它强大的Filter来实现各种功能。
在这里Gateway就相当于一个更加强大的Nginx。只做了路由分发。
通过 localhost:10100/client3/** 可以访问注册中央服务编码为client3的所有接口。
完备源码信息查看可以在gitee或者github上搜索r0ad。
关于作者
来自一线全栈步伐员nine的探索与实践,持续迭代中。
欢迎关注或者点个小红心~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
罪恶克星
金牌会员
这个人很懒什么都没写!
楼主热帖
2. 函数
京东张政:内容理解在广告场景下的实践 ...
从Android开发的角度比较MVC,MVP,MVVM ...
KAFKA EAGLE 监控MRS kafka之操作实践 ...
dotnet 6 为什么网络请求不跟随系统网 ...
HCIA学习笔记十一:ARP地址解析协议 ...
花了两天从几十万行代码里总结出的22个 ...
React技术栈 --》plugin与JSX语法使用 ...
关键字和标识符
数字图像增强的一般方法
标签云
存储
挺好的
服务器
浏览过的版块
网络安全
快速回复
返回顶部
返回列表