![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Soul
文章平均质量分 78
子夜2104
这个作者很懒,什么都没留下…
展开
-
Soul源码阅读系列(十三)Resilience4j插件
本篇文章分析的是Resilience4j插件,Resilience4J是Spring Cloud Gateway推荐的容错方案,它是一个轻量级的容错库。它可以提供熔断和限流的功能。操作前准备:启动shenyu-admin,shenyu网关,shenyu-examples-http测试用例。Soul 网关最近换名字了,新的名字叫ShenYu,所以文章中可能出现书写不一致的地方。Resilience4j 功能演示要在shenyu网关使用Resilience4j插件,需要引入依赖: &原创 2021-06-25 13:08:52 · 281 阅读 · 0 评论 -
Soul源码阅读系列(十二)基于Http长轮询的数据同步(二)
在上一篇文章中,通过跟踪源码的方式了解了http长轮询的执行流程。但是,自己还有一些疑问,本篇文章是在官网的基础上进行了拓展,加入一些自己的理解。zookeeper、websocket 数据同步的机制比较简单,而 http 同步会相对复杂一些。Soul借鉴了 Apollo、Nacos 的设计思想,取其精华,自己实现了 http 长轮询数据同步功能。注意,这里并非传统的 ajax 长轮询!http 长轮询机制如上所示,请求逻辑是Soul网关主动请求 soul-admin 的配置服务。响应逻辑有两种:转载 2021-06-06 15:57:32 · 82 阅读 · 0 评论 -
Soul源码阅读系列(十一)基于Http长轮询的数据同步(一)
在上一篇文章中,跟踪了基于Nacos的数据同步原理,本篇文章将要跟踪基于Http长轮询的数据同步原理。如果是 http 同步策略,soul-web 主动发起长轮询请求,默认有 90s 超时时间,如果 soul-admin 没有数据变更,则会阻塞 http 请求,如果有数据发生变更则响应变更的数据信息,如果超过 60s 仍然没有数据变更则响应空数据,网关层接到响应后,继续发起http请求,反复同样的请求。同步的核心逻辑是:在soul-admin后台修改数据,先保存到数据库,然后保存到soul-admi转载 2021-06-06 15:56:43 · 111 阅读 · 0 评论 -
【Soul源码阅读系列(十)】基于Nacos的数据同步
在上一篇文章中,跟踪了基于ZooKeeper的数据同步原理,本篇文件将要跟踪基于Nacos的数据同步原理。同步的核心逻辑是:在soul-admin后台修改数据,先保存到数据库;然后将修改的信息通过同步策略发送到soul网关;由网关处理后,保存在soul网关内存;使用时,从网关内存获取数据。本文的分析是想通过跟踪源码的方式来理解同步的核心逻辑,数据同步分析步骤如下:1.修改选择器2.更新数据3.接收数据4.使用更新后的数据1. 修改选择器在演示案例之前,将soul-admin的数据同步方式转载 2021-06-06 15:53:25 · 329 阅读 · 0 评论 -
【Soul源码阅读系列(九)】基于ZooKeeper的数据同步
在上一篇文章中,跟踪了基于WebSocket的数据同步原理,本篇文件将要跟踪基于ZooKeeper的数据同步原理。基于 zookeeper 的同步原理很简单,主要是依赖 zookeeper 的 watch 机制,soul-web 会监听配置的节点,soul-admin 在启动的时候,会将数据全量写入 zookeeper,后续数据发生变更时,会增量更新 zookeeper 的节点,与此同时,soul-web 会监听配置信息的节点,一旦有信息变更时,会更新本地缓存。同步的核心逻辑是:在soul-ad转载 2021-06-06 15:50:30 · 147 阅读 · 0 评论 -
【Soul源码阅读系列(八)】基于WebSocket的数据同步
在前面几篇文章中我们体验了如何将自己的服务接入到Soul网关中,接下来几篇我们将要了解的是Soul是如何完成数据同步的,在官网中介绍了4种同步方式:基于WebSocket的数据同步,基于ZoomKeeper的数据同步,基于Http长轮询的数据同步和基于Nacos的数据同步。我们将依次进行分析,本篇文章分析的是基于WebSocket的数据同步。数据同步的原理在官网已经有讲述了数据同步原理:Soul 数据同步的流程,Soul 网关在启动时,会从从配置服务同步配置数据,并且支持推拉模式获取配置变更信息,并且转载 2021-06-06 15:47:57 · 335 阅读 · 0 评论 -
【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插原创 2021-05-19 13:29:42 · 177 阅读 · 0 评论 -
【Soul源码阅读系列(六)】Sofa插件
本篇文章主要介绍学习使用sofa插件,如何将sofa服务接入到Soul网关,以及sofa的简单介绍。主要内容如下:在Soul中使用sofa服务查看官方样例引入依赖注册sofa服务运行sofa服务启动Soul Admin和Soul Bootstrap体验sofa服务关于sofasofa是什么sofa基本原理Sofa插件执行原理BodyParamPlugin插件SofaPlugin插件SofaResponsePlugin插件Sofa服务及代理对象的生成原创 2021-05-15 10:04:08 · 265 阅读 · 0 评论 -
【Soul源码阅读系列(五)】Apache Dubbo插件
今天体验的是Soul中apache dubbo插件,如果你的业务系统是由apache dubbo构建而成的,又需要网关的支持,那么可以直接使用Soul接入。Apache Dubbo 插件的案例演示Soul官方在soul-examples模块提供了测试样例,其中的soul-examples-apache-dubbo-service模块演示的是Soul网关对apache dubbo系统的支持。模块目录及配置信息如下:soul.dubbo是有关Soul对dubbo插件支持的配置,adminUrl是Soul原创 2021-04-05 11:57:28 · 273 阅读 · 0 评论 -
【Soul源码阅读系列(四)】负载均衡的应用
在divide插件中,Soul网关提供了负载均衡算法,对请求网关的IP选择一个真实的服务。在Soul中,负载均衡算法有三种:HashLoadBalance,RandomLoadBalance,RoundRobinLoadBalance。默认使用的是RandomLoadBalance算法,你可以对每个规则要使用何种策略进行设置。使用时机在执行divide插件时,会调用负载均衡算法,根据选择的结果,设置真实的请求服务。//org.dromara.soul.plugin.divide.DividePlug原创 2021-03-28 17:08:31 · 107 阅读 · 0 评论 -
【Soul源码阅读系列(三)】插件是如何被加载和执行的?
在上篇文章中,我们通过一个案例演示了http用户如何接入到Soul网关中,本文将探索其中的原理:Soul如何加载插件?业务接口如何注册到soul admin中?Divide插件的原理是什么?Soul 如何加载插件?首先,我们来看看Soul是如何加载各个插件的?在上一篇文章中,我们看到了Divide插件的调用过程:SoulWebHandler:它实现了WebHandler,重写了handle()方法,用于处理Soul网关中所有的请求。DefaultSoulPluginChain:插件链执行原创 2021-03-17 19:46:56 · 201 阅读 · 0 评论 -
【Soul源码阅读系列(二)】Divide插件
今天体验的是Soul中divide插件,它的主要作用是用于http的代理。在文章后面一节简单分析了divide插件的执行原理。Divide插件使用案例Soul官方在soul-examples模块提供了测试样例,其中的soul-examples-http模块演示的通http发起请求到soul网关,然后再到真实的服务。模块目录及配置信息如下: soul.http是有关Soul的配置,adminUrl是Soul的后台管理地址,port是业务系统的端口,contextPath是业务系统的请求路径。在项目原创 2021-03-10 20:50:03 · 227 阅读 · 0 评论 -
【Soul源码阅读系列(一)】Soul网关初探
本篇文章主要内容如下:Soul是什么如何在本地运行Soul对Soul进行压测Soul 是什么 Soul是什么?它可不是灵魂交友软件!引用Soul的官网,它是这样描述Soul的: 这是一个异步的,高性能的,跨语言的,响应式的API网关。我希望能够有一样东西像灵魂一样,保护您的微服务。参考了Kong,Spring-Cloud-Gateway等优秀的网关后,站在巨人的肩膀上,Soul由此诞生!Soul是一个网关,它的特点如下:支持各种语言(http协议),支持 dubbo,sprin原创 2021-02-25 19:04:03 · 535 阅读 · 0 评论 -
Soul网关中的Resilience4j插件
本篇文章分析的是Resilience4j插件,它可以提供熔断和限流的功能。操作前准备:启动soul-admin,soul网关,soul-examples-http测试用例。Resilience4j功能演示要在soul网关使用Resilience4j插件,需要引入依赖: <!-- soul resilience4j plugin start--> <dependency> <groupId>org.dromara原创 2021-02-06 19:45:38 · 160 阅读 · 0 评论 -
Soul网关中的Hystrix熔断插件(二)
在上一篇文章中,体验到了soul中hystrix插件熔断的功能,今天来分析其中执行过程和相关原理。在HystrixPlugin插件中就是主要的核心处理逻辑:protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) { //省略了其他代码原创 2021-02-05 20:38:18 · 152 阅读 · 0 评论 -
Soul网关中的Hystrix熔断插件(一)
本篇文章要体验Soul网关中对Hystrix熔断插件的支持。当系统承接的流量太大时,为防止这些大流量将系统压垮,常常考虑使用熔断机制,将请求断开,以保护系统。参考之前的流程,启动soul-admin和soul网关,以及业务系统(本次的测试演示使用的是soul-examples-http)。注意在soul网关中,加入hystrix插件。 <!-- soul hystrix plugin start--> <dependency>原创 2021-02-04 20:48:06 · 411 阅读 · 2 评论 -
Soul网关中的Sofa插件执行原理(二)
在上一篇文章中,我们通过跟踪源码的方式理解了Sofa插件的执行原理,将发起的http请求转化为sofa的泛化调用,但是有个关键的地方没有展开讲:就是服务的配置信息是怎么来的?以及代理对象是怎么得到的?本文的分析思路和之前的Apache Dubbo是一样的。 public Mono<Object> genericInvoker(final String body, final MetaData metaData, final ServerWebExchange exchange) throws原创 2021-02-03 20:52:22 · 143 阅读 · 0 评论 -
Soul网关中的Sofa插件执行原理(一)
在之前的文章中,我们体验过了Sofa插件执行流程,本篇文章是通过跟踪源码的方式来理解其中的执行原理。在Soul网关中,Sofa插件负责将http协议转换成sofa协议,涉及到的插件有:BodyParamPlugin,SofaPlugin和SofaResponsePlugin。BodyParamPlugin:负责将请求的json放到exchange属性中;SofaPlugin:使用Sofa进行请求的泛化调用并返回响应结果;SofaResponsePlugin:包装响应结果。BodyParamPl原创 2021-02-01 20:20:31 · 204 阅读 · 0 评论 -
Soul网关中的Apache Dubbo插件执行原理(二)
在上一篇文章中,我们通过跟踪源码的方式理解了Apache Dubbo插件的执行原理,将发起的http请求转化为dubbo的泛化调用,但是但是有个关键的地方没有展开讲:就是服务的配置信息是怎么来的?以及代理对象是怎么得到的?public Mono<Object> genericInvoker(final String body, final MetaData metaData, final ServerWebExchange exchange) throws SoulException {原创 2021-01-30 21:14:09 · 118 阅读 · 0 评论 -
Soul网关中的Apache Dubbo插件执行原理(一)
在之前的文章中,我们体验过了Apache Dubbo插件执行流程,本篇文章是通过跟踪源码的方式来理解其中的执行原理。在Soul网关中,Apache Dubbo插件负责将http协议转换成dubbo协议,设计到的插件有:BodyParamPlugin,ApacheDubboPlugin和DubboResponsePlugin。BodyParamPlugin:负责将请求的json放到exchange属性中;ApacheDubboPlugin:使用Apache Dubbo进行请求的泛化调用并返回响应结果;原创 2021-01-29 21:26:10 · 174 阅读 · 0 评论 -
Soul网关中的Http服务探活
服务探活机制是为了发现系统中上下游服务的的状态。当有新的服务注册时要通知其他系统,当有服务下线时也要告知其他系统。Soul网关中有对Http服务处理的探活,所有的服务对象保存在soul-admin的UPSTREAM_MAP中,这里面的服务对象有两个来源,一个来自于原有的数据库,一个来自于其他服务的注册。@Componentpublic class UpstreamCheckService { //保存上游服务 private static final Map<String, List&原创 2021-01-28 22:39:42 · 595 阅读 · 0 评论 -
Soul网关中的负载均衡
layout: posttitle: Soul网关中的负载均衡tags: Soul在divide插件中,Soul网关提供了负载均衡算法,对请求网关的IP选择一个真实的服务。在Soul中,负载均衡算法有三种:HashLoadBalance,RandomLoadBalance,RoundRobinLoadBalance。默认使用的是RandomLoadBalance算法。使用时机在执行divide插件时,会调用负载均衡算法,根据选择的结果,设置真实的请求服务。//org.dromara.soul.原创 2021-01-27 20:03:29 · 267 阅读 · 0 评论 -
Soul网关中的@SoulSpringMvcClient注解
本篇文章分析的是@SoulSpringMvcClient注解,它的作用是:用于标记SpringMvc服务中的接口,被标记的接口在系统启动的是时候,将当前接口注册到soul-admin后台中。使用方式如下:@RestController@RequestMapping("/order")@SoulSpringMvcClient(path = "/order")public class OrderController { //省略了其他代码 @GetMapping("/findById")原创 2021-01-26 20:57:18 · 553 阅读 · 0 评论 -
Soul网关中的数据同步之Http长轮询(二)
layout: posttitle: Soul网关中的数据同步之Http长轮询(二)tags: Soul在上一篇文章中,通过跟踪源码的方式了解了http长轮询的执行流程。但是,自己还有一些疑问,本篇文章是在官网的基础上进行了拓展,加入一些自己的理解。zookeeper、websocket 数据同步的机制比较简单,而 http 同步会相对复杂一些。Soul借鉴了 Apollo、Nacos 的设计思想,取其精华,自己实现了 http 长轮询数据同步功能。注意,这里并非传统的 ajax 长轮询!.原创 2021-01-25 20:27:40 · 135 阅读 · 0 评论 -
Soul网关中的数据同步之Http长轮询(一)
在上一篇文章中,跟踪了基于Nacos的数据同步原理,本篇文章将要跟踪基于Http长轮询的数据同步原理。如果是 http 同步策略,soul-web 主动发起长轮询请求,默认有 90s 超时时间,如果 soul-admin 没有数据变更,则会阻塞 http 请求,如果有数据发生变更则响应变更的数据信息,如果超过 60s 仍然没有数据变更则响应空数据,网关层接到响应后,继续发起http请求,反复同样的请求。同步的核心逻辑是:在soul-admin后台修改数据,先保存到数据库,然后保存到soul-admi原创 2021-01-23 22:51:51 · 253 阅读 · 0 评论 -
Soul网关中的数据同步之Nacos
在上一篇文章中,跟踪了基于ZooKeeper的数据同步原理,本篇文件将要跟踪基于Nacos的数据同步原理。同步的核心逻辑是:在soul-admin后台修改数据,先保存到数据库;然后将修改的信息通过同步策略发送到soul网关;由网关处理后,保存在soul网关内存;使用时,从网关内存获取数据。本文的分析是想通过跟踪源码的方式来理解同步的核心逻辑,数据同步分析步骤如下:1.修改规则2.更新数据3.接受数据4.使用更新后的数据1. 修改规则在演示案例之前,将soul-admin的数据同步方式配置原创 2021-01-22 21:51:44 · 521 阅读 · 0 评论 -
Soul网关中的数据同步之ZooKeeper
在上一篇文章中,跟踪了基于WebSocket的数据同步原理,本篇文件将要跟踪基于ZoomKeeper的数据同步原理。基于 zookeeper 的同步原理很简单,主要是依赖 zookeeper 的 watch 机制,soul-web 会监听配置的节点,soul-admin 在启动的时候,会将数据全量写入 zookeeper,后续数据发生变更时,会增量更新 zookeeper 的节点,与此同时,soul-web 会监听配置信息的节点,一旦有信息变更时,会更新本地缓存。同步的核心逻辑是:在soul-a原创 2021-01-21 22:14:52 · 200 阅读 · 0 评论 -
Soul网关中的数据同步之WebSocket
在前面几篇文章中我们体验了如何将自己的服务接入到Soul网关中,接下来几篇我们将要了解的是Soul是如何完成数据同步的,在官网中介绍了4种同步方式:基于WebSocket的数据同步,基于ZoomKeeper的数据同步,基于Http长轮询的数据同步和基于Nacos的数据同步。我们将依次进行分析,本篇文章分析的是基于WebSocket的数据同步。数据同步的原理在官网已经有讲述了数据同步原理:Soul 数据同步的流程,Soul 网关在启动时,会从从配置服务同步配置数据,并且支持推拉模式获取配置变更信息,并且原创 2021-01-20 22:53:13 · 415 阅读 · 1 评论 -
Soul网关中的Spring Cloud插件
本篇文章主要介绍学习使用Spring Cloud插件,如何将Spring Cloud服务接入到Soul网关。主要内容如下:在Soul中使用Spring Cloud服务查看官方样例引入依赖注册Spring Cloud服务运行Spring Cloud服务启动Soul Admin和Soul Bootstrap体验Spring Cloud服务在前面几篇文章中,已经体验过了Soul中divide插件,apache dubbo插件和sofa插件,今天的spring cloud插件是最后一篇有原创 2021-01-19 20:31:17 · 477 阅读 · 0 评论 -
Soul网关中的sofa插件
今天体验的是Soul中sofa插件,如果业务系统是由sofa构建而成的,当需要Soul网关的支持时,可以将自己的sofa服务接入soul网关。1.Soul官方在soul-examples模块提供了测试样例,其中的soul-examples-sofa模块演示的是Soul网关对sofa服务的支持。模块目录及配置信息如下: soul.sofa是有关Soul对sofa插件支持的配置,adminUrl是Soul的后台管理地址,contextPath是业务系统的请求路径上下文。2.在sofa服务的pom文件中原创 2021-01-18 20:17:47 · 392 阅读 · 0 评论 -
Soul网关的心得体会(一)
本篇文章是在前面几篇文章的基础上,分享一下个人有关Soul网关的使用心得。Soul网关可以很灵活的支持各种插件,如果不满足要求,还可以自定义插件。所有可以支持的插件在org.dromara.soul.common.enums.PluginEnum,目前有17种插件。每个插件的具体作用是:Global插件:全局使用的插件,设置上下文信息。Sign插件:对请求进行签名认证。Waf插件:对流量实现防火墙的功能,主要用来拦截非法请求,或者异常请求,并且给与相关的拒绝策略。Rate limiter插件:原创 2021-01-17 11:49:27 · 1506 阅读 · 0 评论 -
Soul网关中的apache dubbo插件
今天体验的是Soul中apache dubbo插件,如果业务系统是由apache dubbo构建而成的,又需要网关的支持,那么可以直接使用Soul。1.Soul官方在soul-examples模块提供了测试样例,其中的soul-examples-apache-dubbo-service模块演示的是Soul网关对apache dubbo系统的支持。模块目录及配置信息如下: soul.dubbo是有关Soul对dubbo插件支持的配置,adminUrl是Soul的后台管理地址,contextPath是业原创 2021-01-16 22:00:12 · 318 阅读 · 1 评论 -
Soul网关中的divide插件
Soul网关中的divide插件今天体验的是Soul中divide插件,主要作用是用于http的代理。请求转发Soul官方在soul-examples模块提供了测试样例,其中的soul-examples-http模块演示的通http发起请求到soul网关,然后再到真实的服务。模块目录及配置信息如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y7fShszl-1610716692235)(https://midnight2104.github.io/img/20原创 2021-01-15 21:19:30 · 541 阅读 · 0 评论 -
2021-01-15
Soul入门Soul是什么?引用Soul的官网:这是一个异步的,高性能的,跨语言的,响应式的API网关。我希望能够有一样东西像灵魂一样,保护您的微服务。参考了Kong,Spring-Cloud-Gateway等优秀的网关后,站在巨人的肩膀上,Soul由此诞生!好了,知道了Soul是一个网关,接下来就看看怎么使用它。 通过案例演示的方式比直接了解各个概念的方式更能激发兴趣。play it!从官网拉取项目源码 git clone git@github.com:dromara/soul.git。原创 2021-01-15 08:26:12 · 202 阅读 · 0 评论