【Soul源码阅读】7. sofa 用户接入 Soul 网关流程解析

soul源码阅读(九)soul所有插件介绍 soul所有插件列表 context_path插件 divide插件 dubbo插件 springcloud插件 sofa插件 ratelimiter插件 hystrix插件 sentinel插件 resilience4j插件 monitor插件 waf插件 sign插件 rewrite插件 global插件 webclient插件 webclientresponse插件 tars插件 介绍每个插件 context_path插件 什么是context_path,就是用户 阅读详情

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

之前一直没接触过 sofa,官网的介绍如下:

SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework. In Ant Financial, SOFARPC has been used for more than ten years and developing for five generations. SOFARPC is dedicated to simplify RPC calls between applications, and provide convenient, no code intrusion, stable, and efficient point-to-point remote service invocation solutions for applications. For user and developer easy to improve features, SOFARPC provides a wealth of model abstraction and extensible interfaces, including filter, routing, load balancing, and so on. At the same time, it provides a rich MicroService governance solution around the SOFARPC framework and its surrounding components.

再看下 dubbo 官网:

Apache Dubbo is a high-performance, Java-based open-source RPC framework. Please visit official site for quick start and documentations, as well as the wiki for news, FAQ, and release notes.

无论是昨天的 dubbo,还是今天的 sofa,都是 RPC 框架,用于分布系统间互相调用,这些调用都是在后台服务之间。

现在估计就有小伙伴疑问了,都是后台的服务,接入 Soul 网关是用于什么场景呢?

接入 Soul 网关,可以理解为,把后台的服务直接转换成 HTTP 请求,方便前端直接调用,而不是还需要写一套类似 SpringMVC 的 Controller 层来适配,方便了很多。

好了,说了这些,开始跟我一起操作吧。

1.前置条件

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

官网给了以下依赖样例,soul-bootstrap 的 pom 文件中没有,加上。

<dependency>
	   <groupId>com.alipay.sofa</groupId>
	   <artifactId>sofa-rpc-all</artifactId>
	   <version>5.7.6</version>
   </dependency>
   <dependency>
	   <groupId>org.apache.curator</groupId>
	   <artifactId>curator-client</artifactId>
	   <version>4.0.1</version>
   </dependency>
   <dependency>
	   <groupId>org.apache.curator</groupId>
	   <artifactId>curator-framework</artifactId>
	   <version>4.0.1</version>
   </dependency>
   <dependency>
	   <groupId>org.apache.curator</groupId>
	   <artifactId>curator-recipes</artifactId>
	   <version>4.0.1</version>
   </dependency>
   <dependency>
	   <groupId>org.dromara</groupId>
	   <artifactId>soul-spring-boot-starter-plugin-sofa</artifactId>
	   <version>${last.version}</version>
   </dependency>

网关修改 pom 文件后,需要重启一下。 

这里插入一个小插曲,刚开始我接入时,只引入了 soul-spring-boot-starter-plugin-sofa 的依赖,其他没有引入,重启网关时,有一个 ClassNotFoundException,当时没在意。

然后使用 postman 调用,虽然返回的是 200,但没有返回数据,看了各个后台,也都没有异常。

找了半天,到这里才发现错误是因为依赖引用的不全。

这里告诉我,不要想当然,先老老实实按照官网指导操作来。如果还有问题,就可以到 github 上提 issue。

要养成这样的习惯,融入到社区,提高了自身技术水平,也进一步促进了 Soul 网关的发展!

3.sofa 服务接入网关

依次给出了 springboot 和 spring 2种框架下接入的方案。

这里以源码中的示例 soul-examples-sofa 为例子。

3.1 maven 依赖

很显然,这个项目 soul-examples-sofa 属于 springboot 框架。

<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>soul-spring-boot-starter-client-sofa</artifactId>
    <version>${soul.version}</version>
    <exclusions>
        <exclusion>
            <artifactId>guava</artifactId>
            <groupId>com.google.guava</groupId>
        </exclusion>
    </exclusions>
</dependency>

3.2 yml 配置文件

soul:
  sofa:
    adminUrl: http://localhost:9095
    contextPath: /sofa
    appName: sofa
# adminUrl: 为你启动的soul-admin 项目的ip + 端口,注意要加 http://
# contextPath: 为你的这个项目在soul网关的路由前缀,这个你应该懂意思把? 比如/order ,/product 等等,网关会根据你的这个前缀来进行路由.
# appName:你的应用名称,不配置的话,会默认取sofa配置中application 中的名称

3.3 注解 @SoulSofaClient

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface SoulSofaClient {
    
    String path();

    String ruleName() default "";

    String desc() default "";

    boolean enabled() default true;

    String loadBalance() default "hash";

    int timeout() default -1;

    int retries() default 3;
}

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

// SofaServiceBeanPostProcessor.java
public SofaServiceBeanPostProcessor(final SofaConfig sofaConfig) {
    String contextPath = sofaConfig.getContextPath();
    String adminUrl = sofaConfig.getAdminUrl();
    if (contextPath == null || "".equals(contextPath)
            || adminUrl == null || "".equals(adminUrl)) {
        throw new RuntimeException("sofa client must config the contextPath, adminUrl");
    }
    this.sofaConfig = sofaConfig;
    url = sofaConfig.getAdminUrl() + "/soul-client/sofa-register";
    executorService = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
}

4.打开 sofa 插件

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

这里注册中心配置的是 zookeeper。

5.启动项目

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

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

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

使用 ZooInspector 连接 zk,可以看到 sofa-rpc 节点及接口信息:

6.调用接口,测试

6.1无参 GET 方法

localhost:9195/sofa/findAll

6.2 有参 GET 方法

localhost:9195/sofa/findById?id=95

6.3 有参数 POST 请求

localhost:9195/sofa/insert
{
    "id": "95",
    "name": "sofa_insert_name"
}

 

【Soul源码阅读系列(六)】Sofa插件 本篇文章主要介绍学习使用sofa插件,如何将sofa服务接入到Soul网关,以及sofa的简单介绍。主要内容如下: 在Soul中使用sofa服务 查看官方样例 引入依赖 注册sofa服务 运行sofa服务 启动Soul Admin和Soul Bootstrap 体验sofa服务 关于sofa sofa是什么 sofa基本原理 Sofa插件执行原理 BodyParamPlugin插件 SofaPlugin插件 SofaResponsePlugin插件 Sofa服务及代理对象的生成 阅读详情

相关推荐

FPGA实战笔记——SDRAM乒乓缓存与OV5640视频采集(VGA显示优化篇)

本文详细介绍了基于FPGA的SDRAM乒乓缓存技术在OV5640视频采集与VGA显示优化中的应用。通过设计多时钟域同步和双Bank乒乓缓存策略,有效解决了摄像头30fps输出与VGA 60fps显示之间的帧率不匹配问题,实现了720P高清视频的流畅稳定显示,为实时图像处理系统提供了可靠的硬件解决方案。

ss78901的博客 882

java sofa rpc_引用 SOFARPC 服务

前置条件引入接口定义依赖要引用一个 RPC 服务,用户需要知道 RPC 服务的提供方所发布的接口是什么(如果发布的服务有 unique-id,还需要知道 unique-id),这就要求服务提供方将发布的接口所在的 JAR 包及依赖信息传到 Maven 仓库,以便服务引用方能够引用服务提供方所发布的 RPC 服务。如果是本地运行,需要在 sofaboot-rpc-server 工程目录运行 mvn ...

weixin_35743031的博客 948

usb设备的定位信息获取

一个usb hub有20个口,每个口有一个标号,那么如果一个为X的标号插入了一个android设备,如何通过函数,得到这个X,代码实现如下,获取了location, 得到类似 Port_#0002.Hub_#0003 的字符串,然后,要对应一个表。

babytiger的专栏 2106

sofa接口下载文件

1.读取jar包中resource下文件 正常我们在本地debug代码的时候,用File的方式,或者其他ResourceUtil的方式,都可以取到resource下的文件,但是打成jar包发到线上,就会报取不到文件 解决办法: PathMatchingResourcePatternResolver 注意路径必须带 classpath*: 如果不带classpath*: 那么进行空判断时,就算这个文件不存在,ObjectUtils.isEmpty也不会返回true 以下为正确示例代码 ..

qq_35653822的博客 1290

【墨者学院 】uWSGI 漏洞复现(CVE-2018-7490)

0x01 漏洞详情 uWSGI是一款Web应用程序服务器,它实现了WSGI、uwsgi和http等协议。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_ROOT检测。攻击者可通过发送带有‘…’序列的特制URL请求利用该漏洞查看系统上的任意文件。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_RO...

Summer's blog 1万+

哈工大2024春大数据挖掘期末考试回忆版试题

(3)现有一个用户数量远多于物品(还是物品远多于用户,忘了是哪个了)的情景,应该使用基于user-user的推荐系统还是item-itmen的推荐系统,说明原因。(1)L是n*n拉普拉斯矩阵,x是一个n*1列向量,证明对任意的x,(x)^TLx>=0(6分)(3)证明:p到o的K-可达距离,至少是o的K-distance(2分)(2)(1)的结果说明竞争率的上界是多少?(2)考Gain的意义,如何利用Gain选择划分点(2分)(2)说明如何利用划分后的数据进行验证(2分)(2)k可达距离是对称的吗?

ymd2002的博客 1889

蚂蚁中间件介绍:SOFA

所有中间件都是为了解决特定领域的某个问题SOFA解决:分布式下的服务和组件管理以及调用繁琐的问题。

Y 4822

STM32驱动MG996R舵机的PWM控制与闭环原理

舵机是一种典型的模拟闭环伺服系统,其核心是通过电位器反馈实现角度位置的自动校正。工作原理基于负反馈控制:目标PWM脉宽决定期望角度,电位器输出实时反馈实际角度,控制电路计算偏差并驱动电机消除误差。该机制赋予舵机强带载能力与抗干扰性,是机器人、云台、智能执行器等场景的关键执行单元。在嵌入式开发中,STM32通过定时器生成标准20ms周期、0.5–2.5ms脉宽的PWM信号,需严格遵循电气规范,并解决PA15引脚SWJ复用冲突、定时器重映射及CCR精度计算等关键问题。本文深入解析MG996R舵机控制全流程,涵盖

weixin_42600407的博客 559

sofa-rpc 学习总结

sofa-rpc 学习总结 如下是client调用流程图: client调用样例代码: @Test public void testHelloSyncService() { // 指定注册中心 RegistryConfig registryConfig = new RegistryConfig() .setProt...

xhpscdx的专栏 1604

Android存储方案对比(SharedPreferences 、 MMKV 、 DataStore)

简介:本文介绍了Android开发中常用的键值对存储方案,包括SharedPreferences、MMKV和DataStore,并且对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。

LiuYong_01的博客 1779

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

本文讲述英飞凌TC3xx的通用计时器GTM的架构。

无所适从的我的博客 4594

【自动生成接口文档】Sofaboot集成Swagger3并通过Yapi做接口管理

Sofaboot集成Swagger3并通过Yapi做接口管理

不是很懂 2万+

【Codecs系列】HEVC-SCC(一):核心技术介绍

DATE: 2020.6.4【Tags: HEVC SCC】 1、参考网址 2、SCC简介 3、HEVC-SCC核心技术

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 4803

Soul 网关源码阅读(六)Sofa请求处理概览

今天来探索一下Sofa请求处理流程,看看和前面的HTTP、Dubbo有什么异同

github_35735591的博客 547

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Soul网关源码阅读04-体验sofa代理

结合sofa插件,发起http请求soul网关,体验sofa代理 一、启动服务: soul-admin soul-bootstrap soul-examples-sofa soul-examples-sofa 启动报如下错误,同时会影响网关测的服务调用,导致服务无法调通。 解决方式:这里的 bolt-port: 8888 可能被占用,修改一下这个端口 soul/soul-examples/soul-examples-sofa/src/main/resources/application

xiaoxu的博客 694

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Soul网关源码解析目录

Soul网关源码解析目录 Soul网关源码解析文章列表     对用Java写的高性能网关:Soul,进行一波学习和研究,下面是相关的文章记录 掘金 了解与初步运行 Soul网关源码解析(一) 概览 Soul网关源码解析(二)代码初步运行 请求处理流程解析 Soul网关源码解析(三)请求处理概览 Soul网关源码解析(四)Dubbo请求概览 Soul网关源码解析(五)请求类型探索 Soul网关源码解析(六)Sofa请求处理概览 Soul网关源码解析(七)限流插件初探 Soul网关源码解析(八)路由匹

github_35735591的博客 341

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

【Soul源码阅读】12.soul-admin 与 soul-bootstrap 同步机制之 http 长轮询解析(上)

1.前情回顾 紧接着前两天的 zookeeper,今天来看下 http 长轮询。 2.配置 数据同步策略官网链接https://dromara.org/zh-cn/docs/soul/user-dataSync.html 2.1 soul-admin 修改application.yml 配置文件,打开注释的代码: soul: sync: http: enabled: true 对应 Bean,默认 enabled 就是 true,只要配置 soul.s...

hellboy0621的博客 1072

【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

dsh-purge 完整指南:三步改宿主补丁,按模型换提示词,全程可回退

问了个问题被顶回来,你八成已经把话术改了三遍。可要是模型根本没接到球,改话术有什么用?dsh-purge 是装在本机官方 DeepSeek Harness 上的红队评测插件:清洗宿主层拦截、按模型换系统提示词、内置受控演练台。它干的事只有一件——把两层拆开,让你看清到底是谁在拦你。 ## 装 dsh-purge 之前:两层分不开会怎样 宿主像你和模型之间的总编辑:问题先经它过目,改提示词、审批

gitblog_00622的博客 358

Soul-源码阅读14-Nacos同步数据分析2

问题回顾解决 继续分析昨天boot-strap启动报错NPE的问题,提示: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nacosSyncDataService' defined in class path resource [org/dromara/soul/springboot/starter/sync/data/nacos/NacosSyncDataConfigurati

tbmingzhao的博客 602

res-downloader 爱享素材下载器:免费资源嗅探完整指南

在视频号刷到一段想存的教程、在小红书看中一张图、在 QQ 音乐里单曲循环一首歌——可平台就是不给下载入口,右键也照样没用。**res-downloader(爱享素材下载器)** 是一款免费开源的**网络资源嗅探**下载工具:它靠本地代理把你的流量拦下来,自动认出视频、音频、图片、m3u8 和直播流,丢进列表,让你一键存到本地。全文帮你把它装明白、用好。 ## 五分钟跑通第一次资源下载 第一次成

gitblog_00704的博客 913

旧Mac如何安装macOS Sequoia:OpenCore Legacy Patcher五步上手指南

如果你的 2012 款 iMac 在"软件更新"里已经很久显示"不再受支持",它仍然可以装上 macOS Sequoia——靠的就是 OpenCore Legacy Patcher(下称 OCLP)。这篇文章讲清五步流程、工作原理和 6 个常见坑,看完就能动手。 ## 升级前后的差异一览 OCLP 带来的变化集中在四点:可装版本上限、图形加速、无线能力和系统更新。以一台 2012 年 iMac

gitblog_00286的博客 183

蚂蚁 RPC 框架 SOFA-RPC 初体验

前言 最近蚂蚁金服开源了分布式框架 SOFA,楼主写了一个 demo,体验了一下 SOFA 的功能,SOFA 完全兼容 SpringBoot(当然 Dubbo 也是可以兼容的)。 项目地址:Alipay,该主页有 5 个项目,都是阿里开源的。 sofa-boot, sofa-rpc, sofa-bolt, sofa-ark, sofa-rpc-boot-projects。 快速开始 实际上,SO...

weixin_34032621的博客 317

【SOFARPC】SOFA入门实战

SofaBoot+Sofarpc+zk使用案例

极客中年的博客 1946

SOFARPC调用方式

使用 getResponse 方法需要指定超时时间,否则会造成阻塞,第二次调用需要等待第一次调用结束,没有体现异步的优势,比较低效。使用泛化调用,应用在 RPC 调用时无需依赖二方或三方的 JAR 包,只需要知道服务的接口名和方法名即可引用服务。不会等待提供方返回的结果,并且会忽略提供方的处理结果。当消费方需要结果的时候,需要消费方主动去获取数据。消费方提供一个回调接口,当提供方获取到回调结果,调用后消费方马上返回,不会等待提供方返回的结果,消费方发起调用后等待提供方返回结果,方法可以实现真正的异步调用。

weixin_62973141的博客 1011
上一篇: 【Soul源码阅读】6. Dubbo 用户接入 Soul 网关流程解析
下一篇: 【Soul源码阅读】8. Spring Cloud 用户接入 Soul 网关流程解析
hellboy0621
博客等级 码龄9年 61粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值