前言
soul 的官网有这么一句话: 插件化设计思想,插件热插拔,易扩展。
它是体现的呢?又是怎么去配置的呢?我们一步一步的来操作,我们先从最简单的http的插件开始。
后台配置
soul网关使用 divide 插件来处理http请求。
基本了解:
一个插件有多个选择器,一个选择器对应多种规则。选择器相当于是对流量的第一次筛选,规则就是最终的筛选。详细配置参考文档中的详细配置
增加选择器
增加规则
然后你会发现诶,这个咋不起作用呢?还是无法访问啊。这又是咋回事呢?是因为你的服务端并没有在 soul 网关注册,访问的连接也不是走的网关的连接,它当然不知道你怎么走的。那要怎么注册和访问呢?
引入插件
新起一个 spring boot 的项目引入网关对 http 的代理插件
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-divide</artifactId>
<version>${last.version}</version>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-httpclient</artifactId>
<version>${last.version}</version>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-client-springmvc</artifactId>
<version>${last.version}</version>
</dependency>
具体配置如下
修改 application.properties
修改成 application.yml
并新增配置
soul:
http:
adminUrl: http://localhost:9095 # adminUrl: 为你启动的soul-admin 项目的ip + 端口,注意要加http://
port: 8080 # port: 你本项目的启动端口
contextPath: /soul # contextPath: 为你的这个mvc项目在soul网关的路由前缀
appName: soul-test # appName:你的应用名称,不配置的话,会默认取 `spring.application.name` 的值
full: false # full: 设置true 代表代理你的整个服务,false表示代理你其中某几个controller
上述的 contextPath 为下面代码中 @RequestMapping 中设置的那个前缀。
我们看着例子,进行照猫画虎。新建 HttpController 的类
@RestController
@RequestMapping("/soul")
@SoulSpringMvcClient(path = "/soul/**")
public class HttpTestController {
@GetMapping("/sayHello")
public String sayHello() {
return "hello world";
}
}
修改选择器配置
利用 postman 访问连接:http://127.0.0.1:9195/test/soul/sayHello
出现了
{
"code": -102,
"message": "Rule not found!",
"data": null
}
再次修改 Rule ,
最后终于成功代理了
总结
虽然是照猫画虎的按照官方的例子写个最简单的 demo,能让程序跑起来。但也是花了不少的功夫。
- 先要了解什么是选择器和规则,他们之前的关系又是什么。
- 如果基于 springboot 的项目基于 http 的方法我需要引入哪些包,我怎么去使用它。
- 想要了解一个框架的源码,先从他的使用开始。