Soul 源码分析00 get started

本文介绍了Soul,一个高性能、异步的API网关,具有插件化设计和丰富的流量控制功能。通过修改`soul-admin`配置并运行,可以启动网关并进行基本的Selector和Rule配置,实现对HTTP请求的代理和重定向。
摘要由CSDN通过智能技术生成

Soul 源码分析00 get started

这是一个异步的,高性能的,跨语言的,响应式的API网关。我希望能够有一样东西像灵魂一样,保护您的微服务。参考了Kong,Spring-Cloud-Gateway等优秀的网关后,站在巨人的肩膀上,Soul由此诞生!

Features

  • 支持各种语言(http协议),支持 dubbo,springcloud协议。
  • 插件化设计思想,插件热插拔,易扩展。
  • 灵活的流量筛选,能满足各种流量控制。
  • 内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。
  • 流量配置动态化,性能极高,网关消耗在 1~2ms。
  • 支持集群部署,支持 A/B Test, 蓝绿发布。

官方文档

Github repo

本人使用的是 master分支 b1ed3daa87a1633cc6c5cc131baa0cdd78df643c 版本, 未来可能会有略微不同

# clone repo 到本地
git clone https://github.com/dromara/soul
# 然后进行编译项目:
mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true

# 编译中会遇到有些包找不到的问题, 主动地去编译相应的模块就好, 重复此步骤
# eg:
mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true -f soul-plugin/soul-plugin-monitor/pom.xml

编辑 soul-admin的配置文件 soul-admin/src/main/resources/application.yml

# 去掉h2配置文件的注释
spring:
  profiles:
    active: h2
# 或者配置mysql数据库
datasource:
    url: jdbc:mysql://localhost:3306/soul?useUnicode=true&characterEncoding=utf-8
    username: root
    password:
    driver-class-name: com.mysql.jdbc.Driver

在IDEA中运行 soul-admin 的入口函数 soul-admin/src/main/java/org/dromara/soul/admin/SoulAdminBootstrap.java

访问 http://127.0.0.1:9095 我们就看到首页了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMcNBsqX-1610688268039)(00login.png)]

默认的 账号: admin 密码:123456

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hQlcbH4S-1610688268043)(01index.png)]

随后在IDEA中运行 soul-bootstrap 的入口函数 soul-bootstrap/src/main/java/org/dromara/soul/bootstrap/SoulBootstrapApplication.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9lf9lokt-1610688268044)(02start_bootstrap_log.jpg)]

注意这个log是soul-admin产生的,也就是soul-bootstrap启动后与admin建立了连接

这个时候访问 http://localhost:9195/ 也就是soul-bootstrap会返回

{
	code: -107,
	message: "Can not find selector, please check your configuration!",
	data: null
}

bootstrap产生log

2021-01-15 00:20:00.542 ERROR 93827 --- [-work-threads-2] o.d.soul.plugin.base.utils.CheckUtils    : can not match selector data: divide

根据提示我们打开divide页面, http://localhost:9095/#/plug/divide

添加selector

在这里插入图片描述
在这里插入图片描述

添加selector中我发现 protocol 和 ip:port 会拼接成我们的代理目标地址, 也就是说https : // 这部分也是要手动写的,这是可以优化的点, 做成可选项的 schema, ip, 和port可选缺省 80, 这样可以更规范配置,另外如上图所示这样的写法也是可以正常被代理到 http://baidu.com 的

添加rule
在这里插入图片描述
保存后测试下gateway功能

$curl -i localhost:9195
HTTP/1.1 302 Found
Content-Length: 161
Connection: keep-alive
Content-Type: text/html
Date: Thu, 14 Jan 2021 16:29:38 GMT
Keep-Alive: timeout=4
Location: http://www.baidu.com/
Proxy-Connection: keep-alive
Server: bfe/1.0.8.18

<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>bfe/1.0.8.18</center>
</body>
</html>

可以看到我们访问刚配置好的根路径 / 已经得到重定向返回结果, 浏览器会重定向到https的百度

至此, 最基本的soul gateway已经跑起来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值