普通springboot项目接入soul网关
最近,在工作中实际经历了在springboot项目的基础上进行了soul网关的接入,那么今天记录一下具体的接入和测试过程,整个接入和测试过程还是比较简单的。
1、首先,配置并部署好soul-admin管理后台(相当于soul的后台管理系统)
从git上拉取soul源码,项目地址:https://github.com/dromara/soul
找到admin,并修改配置文件yml:
修改soul数据库信息,包含地址、账号和密码,具体如下:
spring:
thymeleaf:
cache: true
encoding: utf-8
enabled: true
prefix: classpath:/static/
suffix: .html
datasource:
url: jdbc:mysql://127.0.0.1:3306/gateway-test?useUnicode=true&characterEncoding=utf-8
username: test-001
password: test
driver-class-name: com.mysql.jdbc.Driver
修改同步策略,soul现在支持zookeeper方式、http长轮询和websocket三种方式,这里简单介绍下这三种同步策略
①基于 zookeeper 的同步原理很简单,主要是依赖 zookeeper 的 watch 机制,soul-web 会监听配置的节点,soul-admin 在启动的时候,会将数据全量写入 zookeeper,后续数据发生变更时,会增量更新 zookeeper 的节点,与此同时,soul-web 会监听配置信息的节点,一旦有信息变更时,会更新本地缓存。
②websocket 和 zookeeper 机制有点类似,将网关与 admin 建立好 websocket 连接时,admin 会推送一次全量数据,后续如果配置数据发生变更,则将增量数据通过 websocket 主动推送给 soul-web
③zookeeper、websocket 数据同步的机制比较简单,而 http 同步会相对复杂一些。Soul 借鉴了 Apollo、Nacos 的设计思想,取决精华,自己实现了 http 长轮询数据同步功能。注意,这里并非传统的 ajax 长轮询!
http 长轮询机制主要过程如下,soul-web 网关请求 admin 的配置服务,读取超时时间为 90s,意味着网关层请求配置服务最多会等待 90s,这样便于 admin 配置服务及时响应变更数据,从而实现准实时推送。
http 请求到达 sou-admin 之后,并非立马响应数据,而是利用 Servlet3.0 的异步机制,异步响应数据。首先,将长轮询请求任务 LongPollingClient 扔到 BlocingQueue 中,并且开启调度任务,60s 后执行,这样做的目的是 60s 后将该长轮询请求移除队列,即便是这段时间内没有发生配置数据变更。因为即便是没有配置变更,也得让网关知道,总不能让其干等吧,而且网关请求配置服务时,也有 90s 的超时时间。
我采用的的是zk方式,配置文件修改如下:
soul:
upstream:
check: false
sync:
zookeeper:
url: localhost:2181
sessionTimeout: 5000
connectionTimeout: 2000
接下来就是启动启动Soul-Admin,使用浏览器,访问 http://ip:端口/#/user/login地址,进入登录页面,输入账号admin,密码123456登录。
2、项目中添加依赖soul-spring-boot-starter-client-springmvc
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-client-springmvc</artifactId>
<version>${soul.client.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<soul.client.version>2.2.0</soul.client.version>
3、添加配置文件,下面是以application.propertise为例
soul网关设置->http协议
soul.http.admin-url=soul-admin的ip加端口
soul.http.port=项目端口
soul.http.app-name=应用名称(显示在后台的名称)
soul.http.context-path=网关的路由前缀(例如user-center等)
soul.http.full=设置true 代表代理你的整个服务,false表示代理你其中某几个controller
4、接下来就是具体的接入,只需要在你需要代理的controller中添加注解:@SoulSpringMvcClient(path = “/test/**”),如果不是全局代码,那么在相应的方法上添加即可。
5、测试验证:上述步骤完成之后,启动要接入网关项目。然后登陆到soul网关后台,如下图
如上图就可以看到你接入的项目。点击修改可以配置一些选择器、执行顺序等配置。然后就可以通过访问本地部署的soul的ip加端口来访问你接入的项目了(这里有一个点就是一定是soul-bootstrap的ip+端口,而不是soul-admin的ip加端口),剩下的这里就不做具体展示了,大家有时间可以自行研究深一点,我主要是记录一下整体的接入过程,作为自己学习的一个过程,可能存在一些描述不清楚和不合理的地方,还请大家多多包含。
soul的中文文档:https://dromara.org/zh/projects/soul/overview/