【Soul源码阅读】8. Spring Cloud 用户接入 Soul 网关流程解析

Soul 网关(一)---- 架构设计简介、soul-admin、soul-bootstrap Soul 网关(一) Soul 是一个异步的,高性能的,跨语言的,响应式的API网关。今天先来整体了解一下 Soul 的结构。 Soul 架构图 两大部分:Soul-Admin(Soul 网关管理系统) 和 Soul-Cluster(网关Soul 集群) soul-admin (soul 网关的管理系统) soal-admin 依赖 MySQL,首先我们创建 soul 数据库,创建所需要的表,一共 12 个。 然后启动 soul-admin soul-admin 默认端口 9095 ,访问 http 阅读详情

官网文档中有详细的接入流程,地址:https://dromara.org/zh-cn/docs/soul/user-springcloud.html

1.前置条件

2.引入网关对 Spring Cloud 的插件支持

2.1 公共依赖

在 soul-bootstrap 的 pom.xml 文件中,找到了被注释掉的3个依赖,打开注释:

<!--soul springCloud plugin start-->
<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>soul-spring-boot-starter-plugin-springcloud</artifactId>
    <version>${project.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-commons</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>
<!--soul springCloud plugin start end-->

2.2 注册中心依赖及配置

以下两种配置,需要根据业务项目的实际情况选择。

2.2.1 Eureka 注册中心

引入 Eureka 注册中心的依赖:

<!-- springCloud if you config register center is eureka please dependency end-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>

application-local.yml 文件中,把被注释的配置打开:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true

 2.2.2 Nacos 注册中心

引入 Nacos 注册中心的依赖:

<!-- springCloud if you config register center is nacos please dependency this-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>

application-local.yml 文件中,把被注释的配置打开:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

配置完成后,记得重启网关!

3.Spring Cloud 服务接入网关

这里以源码中的示例 soul-examples-eureka 和 soul-examples-springcloud 为例子。

其中 soul-examples-eureka 只是一个注册中心,只需要保证配置文件内容跟 soul-examples-springcloud 能够对应上即可。

3.1 maven 依赖

在业务系统中需要引入如下依赖(查看 soul-examples-springcloud 的 pom 文件中已经引入)

<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>soul-spring-boot-starter-client-springcloud</artifactId>
    <version>${soul.version}</version>
</dependency>

3.2 yml 配置文件

soul:
  springcloud:
    admin-url: http://localhost:9095
    context-path: /springcloud
# adminUrl: 为你启动的soul-admin 项目的ip + 端口,注意要加http://
# contextPath: 为你的这个mvc项目在soul网关的路由前缀,这个你应该懂意思把? 比如/order ,/product 等等,网关会根据你的这个前缀来进行路由.
# full: 设置true 代表代理你的整个服务,false表示代理你其中某几个controller

这里配置的3个属性(full 字段没有配置,默认为 false),对应于 SoulSpringCloudConfig 这个 JavaBean。

@Data
public class SoulSpringCloudConfig {

    private String adminUrl;

    private String contextPath;

    /**
     * Set true means providing proxy for your entire service, or only a few controller.
     */
    private boolean full;
}

 这里联系前几天配置的不同协议,dubbo、sofa 是没有这个字段的(RPC 远程方法调用)。

只有 http 跟今天配置的 springcloud 有这个字段(使用 SpringMVC Controller 层暴露 http 请求)。

所以 full 字段才有意义,如果为 true,代表整个业务系统或微服务节点所有的 Controller 层暴露的接口,都被 soul 网关代理,方便了业务系统中如果有很多需要被代理的接口一个一个去增加注解的麻烦。

3.3 注解 @SoulSpringCloudClient

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface SoulSpringCloudClient {
    
    String path();
    
    String ruleName() default "";
    
    String desc() default "";
    
    String rpcType() default "springCloud";
    
    boolean enabled() default true;
}

通过找这个注解使用的地方,又找到了类似的代码,url 就是自动将 Spring Cloud 服务接口信息同步给 soul-admin 的注册地址。

// SpringCloudClientBeanPostProcessor.java
/**
 * Instantiates a new Soul client bean post processor.
 *
 * @param config the soul spring cloud config
 * @param env    the env
 */
public SpringCloudClientBeanPostProcessor(final SoulSpringCloudConfig config, final Environment env) {
    ValidateUtils.validate(config, env);
    this.config = config;
    this.env = env;
    this.url = config.getAdminUrl() + "/soul-client/springcloud-register";
    executorService = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
}

4.开启 Spring Cloud 插件

【Soul网关管理】【系统管理】【插件管理】【springCloud】【编辑】

5.启动项目

依次启动4个项目,正常启动后,如下图所示:

在 soul-examples-springcloud 控制台输出以下成功注册的日志(springCloud client register success):

2021-01-21 16:36:22.106  INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils  : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/save","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/save","enabled":true} 
2021-01-21 16:36:22.136  INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils  : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/path/**","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/path/**","enabled":true} 
2021-01-21 16:36:22.161  INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils  : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/path/**/name","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/path/**/name","enabled":true} 
2021-01-21 16:36:22.182  INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils  : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/findById","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/findById","enabled":true} 
2021-01-21 16:36:22.204  INFO 8348 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils  : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/test/**","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/test/**","enabled":true} 

【Soul网关管理】【插件列表】【springCloud】

在 soul-admin web 页面可以看到 springCloud 接口注册进来了。

6.调用接口,测试

6.1有参 GET 方法

localhost:9195/springcloud/test/findByUserId?userId=95

6.2有参 POST 方法

localhost:9195/springcloud/test/save
{
    "userId": "95",
    "userName": "springcloud_name"
}

6.3多参 GET 方法

localhost:9195/springcloud/order/path/95/springcloud-name

 

 

 

国产微服务网关-Soul(真香) What is the Soul? 一个异步的,高性能的,跨语言的,响应式的API网关。我希望能够有一样东西像灵魂一样,保护您的微服务。参考了Kong,Spring-Cloud-Gateway等优秀的网关后,站在巨人的肩膀上,Soul由此诞生! 是不是很吊的一句话,站在巨人身上那么这些巨人也就变成了矮子。 整体架构如下图所示: 是不是很炫反正我是没看懂 部署单机版 操作在windows环境 安装SoulAdmin souladmin:控制台,负责维护网关的元数据、配置等等,并提. 阅读详情

相关推荐

Soul网关WebSocket数据同步源码解析:从连接建立到缓存更新

微服务架构中,API网关作为流量入口,必须在高并发下快速完成路由与插件执行,因此本地缓存与配置中心之间的数据同步能力至关重要。WebSocket长连接无需引入额外中间件,支持毫秒级服务端推送,成为Soul网关默认推荐的配置同步方案。其核心链路融合事件驱动、Disruptor异步队列与细粒度Handler分发,管理端变更经事件发布后实时推送给网关客户端,客户端再按类型更新本地缓存,实现运行期配置热更新。本文从源码级视角拆解连接建立、消息分发、缓存刷新与异常重连机制,并针对“改配置不生效”等典型问题给出工程排查

weixin_30127995的博客 116

Soul 极简入门(国产微服务网关)

1. 概述 Soul是基于WebFlux实现的响应式的 API 网关,具有异步、高性能、跨语言等特点。 作者:我希望能够有一样东西像灵魂一样,保护您的微服务。在参考了 Kong、Spring Cloud Gateway等优秀的网关后,站在巨人的肩膀上,Soul 由此诞生! 作者是艿艿的大表弟,胖友信么?! 目前 Soul 功能列表如下: 支持各种语言,无缝集成到 Dubbo、Spring Cloud、Spring Boot 中。 Soul 是极其少支持 Dubbo 的 AP...

weixin_42073629的博客 4935

soul源码阅读(七)Spring Cloud应用示例运行续2

好咧,咱们继续上篇文章运行Spring Cloud应用示例出现的问题,{"code":-106,"message":"Can not find url, please check your configuration!","data":null}。 全文搜索关键字Can not find url, please check your configuration,凭已有的经验(啥经验?读一遍前两篇Spring Cloud的文章,并试着debug看看,就有这个经验了。)定位到org.dromara.soul.

he_cha_bu的博客 1988

Soul网关简述

1. 简述: soul网关是作者根据现有的kong、gateway等网关,再结合公司的定制化需求开发出的一款异步的、高性能的、跨语言的、响应式的api网关。soul网关结合kong的插件话思想和gateway的webflux响应式编程设计,其内置的插件支持不同语言之间的转换,支持请求转发合并,负载均衡,协议转换,限流熔断等诸多功能。而这些功能都是通过可插拔的插件话进行管理的,即在可视化界面进行动态的配置,改变插件的配置和开启关闭。soul网关经过了高并发的生产测试,并拥有高度的可扩展性,...

weixin_47527974的博客 3083

soul源码阅读(五)Spring Cloud应用示例运行

目录 架构认识 了解Eureka Eureka入门使用 启动Spring Cloud示例 架构认识 一个http请求到soul网关,soul网关请求转发到Spring Cloud。 Spring Cloud提供服务应用启动后会将配置和元数据写入到soul admin,同时将服务注册到注册中心Nacos,注册中心可以使用Eureka、Nacos都是可以的。 了解Eureka 本篇文章我们将使用Eureka 作为 Spring Cloud 应用注册中心,首先我们先来了解下它。 Eurek

he_cha_bu的博客 860

MediaCreationToolW11:Windows11系统升级与修复利器

在日常使用Windows11系统的过程中,我们可能会遇到一些棘手的问题,比如系统更新时出现异常导致无法成功更新,或者系统本身出现异常需要进行无损修复。此外,当我们的电脑尚未升级到Windows11,而我们又希望进行升级时,一款高效且可靠的工具就显得尤为重要。接下来,MediaCreationToolW11将开始下载Windows11的安装文件,并创建Windows11介质。在“选择你要执行的操作”界面中,选择“ISO文件”。此时,你可以使用你的账户登录系统,并开始使用全新的Windows11系统了。

nntxthml的博客 2404

【Soul源码阅读系列(七)】Spring Cloud插件

本篇文章主要介绍学习使用Spring Cloud插件,如何将Spring Cloud服务接入到Soul网关。主要内容如下: 在Soul中使用Spring Cloud服务 查看官方样例 引入依赖 注册Spring Cloud服务 运行Spring Cloud服务 启动Soul Admin和Soul Bootstrap 体验Spring Cloud服务 SpringCloudPlugin 源码解析 在前面几篇文章中,已经体验过了Soul中divide插件,apache dubbo插件和sofa插

子夜的博客 283

Windows上python的spark环境搭建

1.安装好JDK 下载并安装好jdk-12.0.1_windows-x64_bin.exe,配置环境变量: 新建系统变量JAVA_HOME,值为Java安装路径 新建系统变量CLASSPATH,值为 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(注意最前面的圆点) 配置系统变量PATH,添加 %JAVA_HOME%bin;%JAVA_HOME%jrebin 在CMD中输入:java或者java -version,不显示不是内部命令等,说明安装成功。

weixin_43915303的博客 651

soul网关系列(一):学习计划、配置安装和soul简介

一个异步的,高性能的,跨语言的,响应式的API优秀网关,参考了Kong,Spring-Cloud-Gateway等优秀的网关。

坚持、死磕、重复 3540

保姆级教程:用Intouch SMC连接S7-200 Smart PLC,Modbus TCP和S7协议一次搞定

本文详细介绍了如何使用Intouch SMC连接S7-200 Smart PLC,涵盖Modbus TCP和S7协议的双协议通信配置。通过环境准备、参数设置、常见问题排查及实战技巧,帮助工程师快速实现工业自动化系统中的稳定通信,提升设备监控效率。

weixin_30499315的博客 429

AI小智语音服务架构与嵌入式成本优化实践

语音交互系统是智能硬件的核心能力,其本质是端云协同的实时数据处理链路,涵盖音频采集、流式传输、语义理解与语音合成四大技术环节。原理上需严格划分物理层(确定性音频I/O)、协议层(WebSocket/Range可靠性通信)和语义层(ASR/LLM/TTS职责解耦),以保障低延迟与高可用。技术价值在于通过VAD前置过滤、分块下载、Token截断等嵌入式级优化,显著降低云端调用成本与网络开销。典型应用场景包括儿童故事机、智能音箱、教育机器人等对响应速度、音色自然度和单次交互成本敏感的AI小智设备。本文聚焦火山引擎

weixin_30653091的博客 349

Soul网关源码阅读(八)路由匹配初探

今日看看路由的匹配相关代码,查看HTTP的DividePlugin匹配

github_35735591的博客 439

001:InVEST学习——产水/水源涵养

InVEST产水模块介绍 前言 (一些碎碎念着急的可以忽略)最开始做inVEST模型是2020年中,应该说对这个软件有很特殊的感情,之前一直想出一个教程,但是因为事情多加上拖延加上懒就耽搁了,事实证明东西不用就确实荒废了,现在面对当初自己做的东西顶多也就能想起一些思路,很多细节都忘了,所以这个教程也相当于是一个备忘录吧。 ...

Victoriaac的博客 2万+

Soul网关源码阅读(六)请求类型探索

在上几篇文章中分析了请求的处理流程,HTTP和RPC请求处理是互斥的,通过请求类型来判断,这篇文章来探索下请求类型的前世今生

github_35735591的博客 200

luks-磁盘加密工具

linux磁盘加密配置工具及步骤详解

zdd56789的博客 120

接口电路设计的关键要点

接口电路设计是嵌入式硬件开发的核心环节,本文系统阐述了五大关键设计要点:1)电平匹配技术,详细分析了3.3V/5V系统互连方案及转换电路计算;2)阻抗匹配原理,包括高速信号反射机制及差分信号处理;3)滤波与去耦设计,提出多级电容配置和"先电容后过孔"布局原则;4)接地设计规范,重点说明模拟/数字地分离及高速信号回流路径;5)防护电路设计,涵盖防反接、过流保护及ESD防护方案。文章通过具体计算公式、器件选型指南和布局技巧,为接口电路设计提供了系统化的解决方案,并附有设计检查清单和典型问题分

weiyvyy的博客 453

mysql网关源码_Soul网关源码阅读(八)路由匹配初探

Soul网关源码阅读(八)路由匹配初探简介今日看看路由的匹配相关代码,查看HTTP的DividePlugin匹配示例运行使用HTTP的示例,运行Soul-Admin,Soul-Bootstrap,Soul-Example-HTTP记得启动数据库docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:la...

weixin_30783205的博客 193

2025华为od机试真题B卷【版本管理】Python实现

在 软件版本管理中,版本号由点分割的数字组成,例如 1.2.3 和 2.8。现在,你需要编写一个函数,计算两个版本号之间的可用版本号个数。这里的可用版本号指的是所有满足 version1<x<version2的版本号x的个数。若 version1 >=version2 返回0.,

MISAYAONE的博客 643

Soul源码总结-01-14

1月14日作业搭建网关环境感悟及总结 搭建网关环境 首先从fork soul的仓库,并git clone 到本地进行调试 git clone https://github.com/dromara/soul.git 参考Soul极简入门 步骤及在调试过程中遇到的error: mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true 合理

qq_42965594的博客 616

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Soul源码阅读】1.初识 Soul

无论我们学习什么东西之前,都要先搞清楚我们要学习的是什么,就像一些哲学思考先要给出清晰的定义,否则后面的一切都无从谈起。 从今天开始,我来和大家一起,学习一款非常优秀的开源网关项目 Soul。 Soul 是什么呢?先来看下官网作者的定义: 这是一个异步的,高性能的,跨语言的,响应式的API网关。我希望能够有一样东西像灵魂一样,保护您的微服务。参考了Kong,Spring-Cloud-Gateway等优秀的网关后,站在巨人的肩膀上,Soul由此诞生! 里面提到了几个关键字,“异步”、“高性能”、“

hellboy0621的博客 1329

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Soul网关源码阅读10-使用Nacos同步数据(01)

本篇分析一下Nacos同步数据原理 1、先配置一下环境 soul-admin soul-admin/src/main/resources/application.yml soul: sync: nacos: url: localhost:8848 namespace: 1c10d748-af86-43b9-8265-75f487d20c6c # acm: # enabled: false # endpoin

xiaoxu的博客 255

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Soul网关源码分析-Soul网关初探

Soul网关初探 目标 Soul网关简介 Soul网关特点 Soul网关架构图 本地搭建Soul网关环境 使用Soul代理Http接口 总结 Soul网关简介    这是一个异步的,高性能的,跨语言的,响应式的API网关。我希望能够有一样东西像灵魂一样,保护您的微服务。参考了Kong,Spring-Cloud-Gateway等优秀的网关后,站在巨人的肩膀上,Soul由此诞生! Soul网关特点 支持各种语言(http协议),支持 dubbo,springcloud协议。 插件

qq_31279701的博客 870

SpringCloud学习之Eureka服务注册中心搭建

SpringCloud学习之Eureka服务注册中心搭建IDEA创建SpringCloud项目创建Eureka-Server的服务注册中心配置eureka-server的pom.xml文件创建启动文件配置application.yml文件 IDEA创建SpringCloud项目 通过Idea的maven,然后选中Create from archeType,然后选中maven-archetype-quickstart,然后按照正常流程走下去,即可创建成功。 创建完成后,即可得到一个空的maven项目,更改p

wangrui17721415的博客 317

Soul网关总结01

Soul网关总结011 插件调用链2 数据同步2.1 Websocket 数据同步https://blog.csdn.net/wu2304211/article/details/1129150592.2 Zookeeper 数据同步2.3 HTTP 长轮询同步数据3 负载均衡4 容错4.1 Hystrix 总结5 限流5.1 RateLimiterPlugin 限流插件5.2 限流总结 1 插件调用链 总结: ​ 每一个插件都自定了一个 spring boot starter。soul-bootstrap

Loving you 1310

Soul 云原生网关最佳实践

Soul 是基于兴趣图谱和游戏化玩法的产品设计,属于新一代年轻人的虚拟社交网络。成立于2016年,Soul 致力于打造一个“年轻人的社交元宇宙”,最终愿景是“让天下没有孤独的人”。在 Soul,用户可以无顾虑地表达自己,认知他人,探索世界,交流兴趣和观点,获得精神共鸣和认同感,在交流中获取信息,并获得有质量的新关系。

阿里云开发者 378

从零开始,设计一个高性能 API 网关

一、前言 最近在 github 上看了 soul 网关的设计,突然就来了兴趣准备自己从零开始写一个高性能的网关。经过两周时间的开发,我的网关 ship-gate 核心功能基本都已完成,最大的缺陷就是前端功底太差没有管理后台 😤。 二、设计 2.1 技术选型 网关是所有请求的入口,所以要求有很高的吞吐量,为了实现这点可以使用请求异步化来解决。目前一般有以下两种方案: Tomcat/Jetty+NIO+Servlet3 Servlet3 已经支持异步,这种方案使用比较多,京东,有赞和 Zuul

Java搜索工程技术栈 2697
上一篇: 【Soul源码阅读】7. sofa 用户接入 Soul 网关流程解析
下一篇: 【Soul源码阅读】番外1.WebFlux服务器启动流程
hellboy0621
博客等级 码龄9年 61粉丝 147原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值