Soul网关是我在任职某大型电商公司中间件技术部的时候所开发的。开源以后,针对不同的用户需求,进行了功能的升级,比如 支持了springcloud
websocket
restful风格
get请求
,插件可以定制化开发等等,感谢开源。
首先我们调研了市场上的一些API网关 zuul
kong
sc-gateway
zuul
是一个中间件产品,完全可以由业务系统自己去引入,性能没达到我们的预期,没有动态化的配置,不利于管理,和我们中间件技术部好像没啥关系。kong
kong确实是好,好到它的某些功能是收费的,而且它是lua语言开发,维护成本太高(其实就是hold不住lua)sc-gateway
这个是基于webflux的,底层也是基于netty,性能可以,其缺点就是,没有动态化的配置,而且也只是sc-cloud体系的,其他的业务系统怎么接入? 怎么做成公用服务?每次新上接口怎么办?动态调整接口的限流速率怎么办?等等很多问题。so 基于以上问题,我们综合考虑,决定自己干一个。我在做的时候,参考了kong的插件思想,sc-gateway的webflux思想,再结合公司的定制需求写出了soul网关.
soul-admin
就是整个soul的整个管理后台,它配置所有的规则选择器,然后再把数据写到zookeeper。所以这有个很重要的东西,用户访问soul的数据请求格式是什么?
soul-admin
以及 soul-web
为localhost:8080localhost:8080
话不多说,首先来一张uml
图来表示他们之间的关系。
话多说几句:因为篇幅问题,我这里只是举一个列子。
条件:module=test
http://10.10.10.4:8088
可以配置多个,然后设置负载方式与权重我们再来看一下,这个选择器下面的规则配置:
header 匹配 method = test/putPathBody
如果你是一直看下来的话:我相信你就有了印象,如果我们在http header :
ws://localhost:8080/? module=ws&method=/bbex/websocket/buyAndSell&rpcType=websocket
参数详解: 1.localhost:8080 是soul启动的ip和端口。 2.module(必填):值是你用来匹配selector的关键 3.method (参数): 你的 websocket路径,同时也用做匹配rule 4.rpcType :websocket 必填,且必须为websocket这里少说两句了
org.dromara.soul.web.plugin.SoulPlugin
org.dromara.soul.web.plugin.AbstractSoulPlugin
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter</artifactId>
<version>1.0.5-RELEASE</version>
</dependency>
or
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-web</artifactId>
<version>1.0.5-RELEASE</version>
</dependency>