自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 java8 stream 常见用法

Java8 新出的 stream 流操作集合的,每次想使用时,虽然知道有这个功能,但一时想不出来怎么写,网上查有时候不太好查,因此自己来写一篇总结贴。我们新建一个类 Student。@Data@AllArgsConstructorpublic class Student { private String id; private String name; private int age; //班级名称 private String className;

2021-03-02 14:34:52 199

原创 Soul 学习笔记---使用 rewrite,context-path 插件(二十)

1.运行 context-path 插件我们在使用 soul 网关时,yml 文件里就配置了 contextPath,不过我们可以使用 context_path 插件进行重写,这也体现了 soul 网关的灵活配置登录 soul-admin 开启 context-path 插件,选择器规则配置如下我们使用网关 http://localhost:9195/context/http/order/findById?id=3 访问时,真正执行的 url 就是 http://192.168.1.99:8188

2021-02-06 16:26:27 183

原创 Soul 学习笔记---使用 waf 插件(十九)

登录 soul-admin,开启 waf 插件。官网上的这两句很重要,waf 插件源码的实现也是根据这两句话来的。当 module 设置为 black 模式的时候,只有匹配的流量才会执行拒绝策略,不匹配的,直接会跳过。当 module 设置为 mixed 模式的时候,所有的流量都会通过 waf插件,针对不同的匹配流量,用户可以设置是 拒绝,还是通过。一开始我选的 black 模式,配置如下。请求时,就是这样的。接下来看下源码是怎么实现的。waf 插件是前置插件,也就是在请求真正 url

2021-02-05 21:41:20 281 1

原创 Soul 学习笔记---使用 sign 插件(十八)

参考 soul 官方文档,sign插件1.启动 soul-admin, 开启 sign 插件,添加 sign 插件的选择器和规则,这里和 divide 插件的一致2.soul-bootstrap 引入依赖,启动 soul-bootstrap,启动 soul-examples-http<dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-starte

2021-02-04 22:28:38 582

原创 Soul 学习笔记---使用 hystrix 插件(十七)

hystrix插件是用来做熔断的,服务熔断就是当A服务去调用B服务,如果A服务迟迟没有收到B服务的响应,那么就终断当前的请求,而不是一直等待下去,一直等待下去的结果就是拖垮其它的服务。当系统发生熔断的时候,我们还要去监控B服务,当B服务恢复正常使用时,A服务就发起重新调用的请求。首先在 soul-bootstrap 添加依赖<dependency> <groupId>org.dromara</groupId> <artifactId>sou

2021-02-03 21:56:20 97

原创 Soul 学习笔记--- rate_limiter 插件源码分析(十六)

上一篇跑通了 rate_limiter 插件,今天来看下它是怎么实现的。soul 的 rate_limiter 限流使用的是令牌桶算法,这里先看下什么是令牌桶算法。主要有两个字段,capacity 是令牌桶的容量,即可以保存的最大令牌数,rate 是每秒往令牌桶放的令牌,如果令牌桶满了,就把令牌舍弃。请求过来时,拿到令牌就去执行,拿不到就舍弃,下面的图很清晰。soul 使用rate_limiter 插件时,拿令牌的操作都是在 lua 脚本里执行的,也就是在这个 isAllowed 方法。 p

2021-02-01 21:35:24 163

原创 Soul 学习笔记---使用 rate_limiter 插件(十五)

今天使用下 rate_limiter 插件。开启 redis,启动 soul-admin,soul-bootstrap,soul-examples-http,开启 divide 插件和 rate_limiter 插件。先看下插件链的执行顺序。skip和未开启的插件就不讲了。GlobalPlugin 构建 SoulContext ,并把 SoulContext 放到 ServerWebExchange先走的是 rate_limiter 插件,RateLimiterPlugin 使用 RedisRa

2021-01-30 23:34:33 283

原创 Soul 学习笔记---soul-examples-sofa插件流程分析(十四)

根据soul官方文档的指引,Sofa接入soul网关,启动完 soul-admin,soul-bootdtrap,再去启动 TestSofaApplication 时报连接错误,看了下是因为没启动 zookeeper,zookeeper 开启后 ,就成功运行了 sofa插件,但使用网关访问时报这个错误。{"code":-106,"message":"Can not find url, please check your configuration!","data":null}后来发现重启 soul-b

2021-01-30 01:13:34 457

原创 Soul 学习笔记---插件流程分析(十三)

springcloud ,divide 插件跑通后,今天再 debug下 详细的流程。这里可以看到 springCloud 插件,divide 插件都是在 webClientPlugin 插件之后执行的。首先来看下插件的继承结构,soulPlugin 接口定义了这几个方法,而每个插件具体的类都实现了这几个方法。AbstractSoulPlugin 实现的 execute 方法 public Mono<Void> execute(final ServerWebExchange ex

2021-01-29 00:55:38 185 2

原创 Soul 学习笔记---插件流程初步分析(十二)

springcloud ,divide插件都能跑通了,现在就看下请求是如何转发的。从调用栈可以看到,程序进来的入口类是 SoulWebHandler。后面在 AbstractSoulPlugin 中,遍历 plugin list,一个个去调用开启的插件。这就是传说中的责任链模式了。责任链模式是行为型设计模式的一种,为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。一般每个接收者包含对另一个接收者的引用,如果一个对象不能处理该请求,那么会将请求传递给下一个接收者。

2021-01-27 23:39:59 168

原创 Soul学习笔记---运行 spring-cloud-example(十一)

运行soul 项目下的 spring cloud example1.首先启动 soul-admin,登录后,在插件列表开启 springcloud 插件2.soul-bootstrap 引入 springCloud 相关依赖,这里使用的注册中心是 nacos,所以也要引入 nacos 依赖。<dependency> <groupId>org.dromara</groupId> <artifactId>soul-spring-boot-

2021-01-27 00:52:50 155

原创 Soul 学习笔记---使用 nacos 实现数据同步下篇(十)

使用 nacos 进行数据同步时,首先 soul-admin 的 application.yml 文件配置使用 nacos 同步 sync:# websocket:# enabled: true# zookeeper:# url: localhost:2181# sessionTimeout: 5000# connectionTimeout: 2000# http:# enabled:

2021-01-26 00:09:59 179

原创 Soul 学习笔记---数据同步简单总结(九)

数据同步的几种方式也看的差不多了,还剩下 http 长轮询,我准备先搁置下,今天简单写个总结贴,明天再分析下 nacos 同步,接下来就重点看网关是如何使用调用链转发请求的了。数据同步的处理是在每个 listener 里面,这些 listener 都实现了接口 DataChangedListener,然后在自己类内部,根据自己的同步机制,进行对应的处理。当有数据变更时,中间有个 dispatcher 转发,寻找对应的 listener 去调用具体的方法即可。这一块设计我觉得特别好,尤其是还在 Dat

2021-01-23 22:06:08 406

原创 Soul 学习笔记---使用 nacos 实现数据同步中篇(八)

昨天只是简单看下 nacos 同步那块代码,今天准备跑起来看看。首先从官网下载 nacos,nacos 下载很方便,这是 windows 下载地址。下载解压到一个目录,当前目录打开 cmd 窗口,运行 startup.cmd -m standalone,就可以启动 nacos 了,启动完成,浏览器访问 http://localhost:8848/nacos 即可进入 nacos 管理后台,用户名密码都是 nacos。nacos 服务启动后, 就去启动了 soul-admin,soul-bootstr

2021-01-23 00:30:54 179

原创 Soul 学习笔记---使用 nacos 实现数据同步上篇(七)

soul 的数据同步也支持使用 nacos,这个我之前没用过,甚至没听过,网上查了一遍,只知道是阿里巴巴开源的,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,nacos 可作为微服务核心的服务注册与发现中心,这个看完一圈还是不理解。上一篇讲到分布式系统的 CAP 理论,看到说 nacos 同时支持CP和AP原则,支持切换,我觉得应该是比 zookeeper 更强一些,也是用来存储数据的。使用 nacos 做数据同步,在 application-local.yml 配置 nacossou

2021-01-22 01:00:09 144

原创 Soul 学习笔记---使用 zookeeper 实现数据同步(六)

今天看下 zookeeper 怎么实现数据同步的。首先查下 zookeeper 是什么,网上看了一些资料,大概明白了它的用处。分布式系统有个 CAP 理论:一致性:在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性,等同于所有节点访问同一份最新的数据副本。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。**可用性:**每次请求都能获取到正确的响应,但是不保证获取的数据为最新数据。**分区容错性:**分布式系统在遇到任何网络分区

2021-01-21 00:30:52 165

原创 Soul 学习笔记---数据同步 websocket 连接建立过程分析(五)

上一篇讲到 soul 是如何使用 websocket 进行数据同步的,今天来分析下,websocket 连接是什么时候建立的。上一篇也讲到,启动 soul-admin 时,因为 yml 配置了使用 websocket 进行同步,会加载这三个类,WebsocketCollector 这个类就是开启一个 websocket 服务。soul-bootstrap 的 pom 文件引入了这个 starter。<!--soul data sync start use websocket-->&lt

2021-01-19 22:12:09 184

原创 Soul 学习笔记---soul 数据同步的浅显分析(四)

当我们在 soul-admin 更改 selector 或者 rule 时,数据是怎么同步到网关内存中的呢。我们知道 soul 网关有四种数据同步的方式,http 长轮询,websocket,zookeeper,nacos,数据同步处理就是在这些 listener 里进行的,默认使用 websocket 同步。今天也主要是看 websocket 同步方式。以更新 selector 为例,执行过程是在 publishEvent 方法。这里使用 eventPublisher (也就是Applicat

2021-01-19 01:29:42 785 1

原创 Soul学习笔记---运行 soul-examples-dubbo(三)

今天运行 soul-examples-dubbo,其实这里的配置可以参考官方文档,写的很详细。dubbo 默认使用 zookeeper 作为配置中心,当然也不一定非要使用 zookeeper,nacos 也可以,只要你在 soul-admin 修改下相关的配置即可。我这次启动 soul-examples-dubbo 时,还是遇到不少问题的,首先是 zookeeper 的安装,就这个问题我都搞了三四个小时,按照网上的配置一直不成功,最后才发现是因为配置的 JAVA_HOME 路径里有空格,为了个小问题折腾了

2021-01-17 00:06:48 138

原创 Soul学习笔记---运行 soul-examples-http(二)

今天准备跑下 soul 官方的 example,首先从 soul-examples-http 开始。这个 example,soul处理的是 http 请求,使用的插件是 divide。刚开始 soul-examples-http下的 SoulTestHttpApplication没有运行选项,后来群里朋友提醒才知道,右键 soul-examples-http的 pom.xml,选择 add as maven project,就可以执行这个模块了。可以看到,这个模块里, soul相关的配置主要有3个

2021-01-16 00:43:40 344

原创 Soul 学习笔记---搭建编译项目(一)

今天开始进行为期一个月的 Soul 源码学习,简单来说,Soul 是基于 WebFlux 实现的响应式的 API 网关,具有异步、高性能、跨语言等特点,Soul网关官网介绍。由于我一直写的是单体应用,还没有用过网关,因此先去查了网关到底是什么。看到芋道源码的一篇文章,讲解的比较详细,文章地址。看完后,我才对网关有点了解,网关主要用在微服务架构,是一切流量的入口,针对用户的请求进行转发。我们可以在网关做很多事情,比如限流,熔断,监控,也因此对网关的性能,稳定性要求很高。准备工作soul fork 到自己

2021-01-14 21:29:02 156

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除