Soul网关源码分析-环境搭建
1、下载源码,搭建soul运行环境
源码下载地址:https://github.com/dromara/soul
1)先把源码克隆下来:
git clone git@github.com:dromara/soul.git
2)导入idea:
File-Open-选中源码工程导入
3)编译优化命令:
mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true
2、soul整体了解
概述
Soul 是基于 WebFlux 实现的响应式的 API 网关,具有异步、高性能、跨语言等特点
功能清单
- 支持各种语言,无缝集成到 Dubbo、Spring Cloud、Spring Boot 中(Soul 是极其少支持 Dubbo 的 API 网关,通过 Dubbo 泛化调用 实现)。
- 支持各种语言(http协议),支持 dubbo,springcloud协议。
- 插件化设计思想,插件热插拔,易扩展。
- 灵活的流量筛选,能满足各种流量控制。
- 内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。
- 流量配置动态化,性能极高,网关消耗在 1~2ms。
- 支持集群部署,支持 A/B Test, 蓝绿发布。
系统架构图
单机部署(Soul转发请求到后端的部署图)
3、运行soul-admin模块,并了解admin模块具有的功能
步骤:
1)、将数据库连接地址改为本机数据库地址,涉及修改文件为soul-admin模块中resources目录的application.yml文件,涉及修改内容如下:
datasource:url: jdbc:mysql://localhost:3306/soul?useUnicode=true&characterEncoding=utf-8username: rootpassword:
2)、运行soul-admin模块中的SoulAdminBootstrap类,启动soul-admin模块,有如下日志打印表示启动成功
2021-01-14 18:42:15.088 INFO 23180 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 9095 (http) with context path ''
2021-01-14 18:42:15.093 INFO 23180 --- [ main] o.dromara.soul.admin.SoulAdminBootstrap : Started SoulAdminBootstrap in 8.672 seconds (JVM running for 13.272)
3)、通过访问http://127.0.0.1:9095地址登录Soul Admin 控制台,如下图所示:
输入密码admin/123456登录后首页如下:
4、运行soul-bootstrap,并了解bootstrap的功能
1)运行soul-bootstrap模块的SoulBootstrapApplication类,启动soul-bootstrap模块,有如下日志打印表示启动成功
2021-01-14 19:25:45.075 INFO 19940 --- [ main] o.d.s.b.SoulBootstrapApplication : Starting SoulBootstrapApplication on LAPTOP-UTMT03GB with PID 19940 (D:\geek\source\soul\soul\soul-bootstrap\target\classes started by wenhu in D:\geek\source\soul\soul)
2021-01-14 19:25:45.076 INFO 19940 --- [ main] o.d.s.b.SoulBootstrapApplication : The following profiles are active: local
2021-01-14 19:25:46.746 INFO 19940 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2021-01-14 19:25:46.750 INFO 19940 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2021-01-14 19:25:46.797 INFO 19940 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 18ms. Found 0 Redis repository interfaces.
2021-01-14 19:25:48.006 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[global] [org.dromara.soul.plugin.global.GlobalPlugin]
2021-01-14 19:25:48.006 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[sign] [org.dromara.soul.plugin.sign.SignPlugin]
2021-01-14 19:25:48.006 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[waf] [org.dromara.soul.plugin.waf.WafPlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[rate_limiter] [org.dromara.soul.plugin.ratelimiter.RateLimiterPlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[hystrix] [org.dromara.soul.plugin.hystrix.HystrixPlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[resilience4j] [org.dromara.soul.plugin.resilience4j.Resilience4JPlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[divide] [org.dromara.soul.plugin.divide.DividePlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[webClient] [org.dromara.soul.plugin.httpclient.WebClientPlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[divide] [org.dromara.soul.plugin.divide.websocket.WebSocketPlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[alibaba-dubbo-body-param] [org.dromara.soul.plugin.alibaba.dubbo.param.BodyParamPlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[dubbo] [org.dromara.soul.plugin.alibaba.dubbo.AlibabaDubboPlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[monitor] [org.dromara.soul.plugin.monitor.MonitorPlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[response] [org.dromara.soul.plugin.httpclient.response.WebClientResponsePlugin]
2021-01-14 19:25:48.007 INFO 19940 --- [ main] o.d.s.w.configuration.SoulConfiguration : load plugin:[response] [org.dromara.soul.plugin.alibaba.dubbo.response.DubboResponsePlugin]
2021-01-14 19:25:48.186 INFO 19940 --- [ main] b.s.s.d.w.WebsocketSyncDataConfiguration : you use websocket sync soul data.......
2021-01-14 19:25:48.336 INFO 19940 --- [ main] o.d.s.p.s.d.w.WebsocketSyncDataService : websocket connection is successful.....
2021-01-14 19:25:48.464 INFO 19940 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'
2021-01-14 19:25:50.329 INFO 19940 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 9195
2021-01-14 19:25:50.332 INFO 19940 --- [ main] o.d.s.b.SoulBootstrapApplication : Started SoulBootstrapApplication in 6.724 seconds (JVM running for 12.016)
2)通过观察启动日志,在soul-bootstrap模块启动后,会跟soul-admin模块建立起websocket连接,soul-bootstrap模块跟websocket连接的日志如下:
2021-01-14 19:25:48.186 INFO 19940 --- [ main] b.s.s.d.w.WebsocketSyncDataConfiguration : you use websocket sync soul data.......
2021-01-14 19:25:48.336 INFO 19940 --- [ main] o.d.s.p.s.d.w.WebsocketSyncDataService : websocket connection is successful.....
soul-admin模块跟websocket连接相关的日志如下:
2021-01-14 19:25:48.349 INFO 23180 --- [0.0-9095-exec-5] o.d.s.a.l.websocket.WebsocketCollector : websocket on open successful....
查看soul-bootstrap模块中的application-local.yml文件的配置,确实存在websocket相关配置,如下:
soul :file:enabled: truecorss:enabled: truedubbo :parameter: multisync:websocket :urls: ws://localhost:9095/websocket
目前初步猜想soul-bootstrap是通过启动时和soul-admin模块建立websocket连接来实现当管理控制台配置数据发生变化时,动态刷新缓存在JVM内存中的配置数据的,后续通过阅读源码的方式来验证这个猜想。
5、总结
- 今天是学习Soul源码的第一天,先从宏观的层面了解,通过定义了解到Soul主要使用了WebFlux响应式编程,所以后续学习源码时,需要先对WebFlux进行一定程度的学习,作为学习源码的基础;
- 另外,通过功能清单了解到Soul能很好集成http、Dubbo、SpringCloud等,后续计划通过soul-examples中的demo作为入口,深入了解soul是如何处理这几种不同接入方式的转发处理的;
- 除此之外,在今天运行soul-admin和soul-bootstrap模块的过程中,也了解到soup-admin中配置的更改是有一个同步动作将修改后的配置信息实时更新到缓存中的,在后续也会通过源码阅读的方式理解底层的实现原理;
- 还有Soul的流量控制,包括负载均衡的处理,灵活的流量筛选实现,限流,熔断等的处理,插件热插拔,易扩展是如何实现的,也将通过阅读以及调试代码进一步了解;
- 最后,Soul的代码中有大量优雅的设计模式的运用,包括工厂模式、策略模式、责任链模式、模板方法模式等,后续在源码阅读的过程中,也计划对涉及的设计模式进行比较深入的研究。
参考资料
soul官方介绍
芋道soul极简入门
soul开源网关项目搭建学习
极客时间Java进阶训练营Soul网关介绍
Soul网关源码分析-环境搭建相关推荐
- soul网关源码解析-环境搭建
项目功能简介 支持各种语言(http协议),支持 dubbo,springcloud协议. 插件化设计思想,插件热插拔,易扩展. 灵活的流量筛选,能满足各种流量控制. 内置丰富的插件支持,鉴权,限流, ...
- cl.zk0.info/index.php,兄弟连区块链入门到精通教程btcpool矿池源码分析环境搭建
原标题:兄弟连区块链入门到精通教程btcpool矿池源码分析环境搭建 btcpool矿池-测试环境搭建及使用cgminer测试 本文档基于Ubuntu 16.04 LTS, 64 Bits. 安装Bi ...
- 兄弟连区块链入门教程btcpool矿池源码分析环境搭建
btcpool矿池-测试环境搭建及使用cgminer测试 本文档基于Ubuntu 16.04 LTS, 64 Bits. 安装Bitcoind+ZMQ Dependencies apt-get -y ...
- Soul网关源码阅读(七)限流插件初探
Soul网关源码阅读(七)限流插件初探 简介 前面的文章中对处理流程探索的差不多了,今天来探索下限流插件:resilience4j 示例运行 环境配置 启动下MySQL和redis d ...
- Soul网关源码阅读番外篇(一) HTTP参数请求错误
Soul网关源码阅读番外篇(一) HTTP参数请求错误 共同作者:石立 萧 * 简介 在Soul网关2.2.1版本源码阅读中,遇到了HTTP请求加上参数返回404的错误,此篇文章基于此进行探索 ...
- Soul 网关源码阅读(四)Dubbo请求概览
Soul 网关源码阅读(四)Dubbo请求概览 简介 本次启动一个dubbo服务示例,初步探索Soul网关源码的Dubbo请求处理流程 示例运行 环境配置 在Soul源码clone下来 ...
- Soul网关源码阅读(十)自定义简单插件编写
Soul网关源码阅读(十)自定义简单插件编写 简介 综合前面所分析的插件处理流程相关知识,此次我们来编写自定义的插件:统计请求在插件链中的经历时长 编写准备 首先我们先探究一下,一个P ...
- Soul网关源码阅读(九)插件配置加载初探
Soul网关源码阅读(九)插件配置加载初探 简介 今日来探索一下插件的初始化,及相关的配置的加载 源码Debug 插件初始化 首先来到我们非常熟悉的插件链调用的类: SoulWebHa ...
- Soul网关源码阅读(八)路由匹配初探
Soul网关源码阅读(八)路由匹配初探 简介 今日看看路由的匹配相关代码,查看HTTP的DividePlugin匹配 示例运行 使用HTTP的示例,运行Soul-Admin,Sou ...
最新文章
- 应届毕业生没有工作经验,怎么才能找到合适的工作?
- mkdir()提示No such file or directory错误的解决方法
- python怎么安装到d盘-python必须装在c盘吗
- Active Object 并发模式在 Java 中的应用--转载
- android 导入系统证书,安卓手机添加系统证书方法(HTTPS抓包)
- CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator
- CodeForces - 850C Arpa and a game with Mojtaba(博弈+sg函数)
- 基于单片机步进电机ppt答辩_基于MCU和DSP的步进电机控制技术分析
- 4)lsof linux命令,***Linux命令实时监测系统(top,htop,iotop,lsof,tcpdump,netstat,vmstat,iostat)...
- Networdx小案例学习
- 47. Python socket编程 2
- bcc校验位怎么算的_数据BCC校验码计算工具
- 软件发布的版本缩写含义RC 、RTM
- 问题跟踪软件URTracker和Windows域的集成
- 如何使用jstack?线程的状态?
- 计算机应用怎么写,计算机应用专业描述怎么写
- linux开机自动root,linux怎样设置root自动登录
- Android 分享功能之 微信 图片分享
- 程序员代码面试指南刷题--第五章.字符串的调整I
- 积极主动 个人愿景的原则_IT专家的愿景:您个人需要了解的内容
热门文章
- 【踩坑记录】为VMware虚拟机引用主机代理
- 【CV作业02】图像灰度值变换+UI
- 计算机网络-数据链路层功能概述
- 头条搜索战百度:进攻性放手,危机并存
- libcurl 库的编译
- ABAP bgRFC 实例
- 激光雷达建图(基于ROS)及定位数据获取步骤
- Scratch软件编程等级考试一级——201909
- 大数据Hive(一):​​​​​​​Hive基本概念
- [flow] 1.Spyglass CDC