因为目前开发的微服务项目是基于dubbo的微服务框架。Service层我们使用dubbo提供的服务注册、请求分发、负载均衡功能。在这些方面上duboo已经做得很好了。但是我们的web层服务也需要做一些负载均衡、心跳检测、服务熔断之类的事情。我们就使用soul网关来做吧。

Soul网关是国人研发开源的一个网关项目,基于spring-webflux高效处理网络请求,提供了简洁方便的配置界面,预设了多个可热插拔的网关插件,因为是国人开发的,所以也有比较友好的中文官方文档提供,该网关支持集群部署,可以无缝介入spring cloud与dubbo(通过插件形式),官网地址如下:

https://dromara.org/website/zh-cn/dromara.org

嗯首先明确一下我需要使用Soul网关做些什么?1.我需要使用该网关统一接收外部请求并转发2.我需要该网关提供基本的心跳检测和熔断功能3.我需要将自己的用户登录模块与该网关绑定,让接受到分发请求的页面能够获取用户的登录信息token.

实现要求1与2都只需要使用Soul网关的divide插件即可,实现要求3则需要我自己实现一个插件,那么我们先看看soul怎么安装及配置吧。

1. 下载soul源码



git clone https://github.com/Dromara/soul.git



2. 在IDEA中配置soul-admin(网关配置工具)的zk地址及数据库地址,并在指定是数据库中执行soul.sql脚本初始化插件配置:



soul:
 sync:
 strategy: zookeeper
 zookeeper:
 url: zk001.insigma:2181
 sessionTimeout: 5000
 connectionTimeout: 2000
datasource:
  url: jdbc:mysql://192.168.1.14:3306/gateway?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&failOverReadOnly=false&autoReconnect=true&serverTimezone=GMT%2B8
  username: gateway
  password: Epsoft2019
  dbcp2:
    driver-class-name: com.mysql.jdbc.Driver



3. 配置soul-bootstarp的zk地址,这个项目是网关的本体,admin中对网关进行的配置会被同步到zk上,然后被实时拉取,这就是所谓的配置热插拔的原理了



soul :
    filterTimeEnable : false
    filterTime : 10
    sync:
        strategy: zookeeper
#        websocket :
#             url: ws://localhost:8887/websocket
zookeeper:
             url: zk001.insigma:2181
             sessionTimeout: 5000
             connectionTimeout: 2000
        http:
             url : localhost:8888



4. 输入soul-admin的ip:端口,进入配置中心,输入初始账密admin/123456:




dubbo java api网关 dubbo网关方案_选择器


5.

如图所示,我们首先应进入系统管理-插件管理。因为我们目前只需要使用divide插件,所以将其他的插件禁用,打开divide插件即可。

5. 随后进入插件列表,点击divide,可以看到添加选择器和添加选择规则两个选项:


dubbo java api网关 dubbo网关方案_选择器_02


Emmm这什么鬼?嘛,我反正理解上选择器这里配置的是模块,对应我的项目就是一个web微服务,选择器规则这里配置的则是该微服务的请求url,这么解释是不是就比较舒服一点?

首先点击添加选择器,然后按下图添加:


dubbo java api网关 dubbo网关方案_dubbo中文文档_03


选择规则,这里我将规则设置为match/,也就是接收所有类型请求的意思


dubbo java api网关 dubbo网关方案_zookeeper_04


6.配置已经完成,让我们试着调用一下接口,看下请求是否被成功转发吧。

首先启动soul-bootstrap,我们已经说过,这项目是soul的本体,是处理请求的地方。

随后我们通过postman调用soul-bootstrap的url及端口:


dubbo java api网关 dubbo网关方案_选择器_05


如图所示,我们调用该网关服务时,必须在网关上添加表示请求表示的请求头:

1. module-这个是我们在上文中配置的模块名appsite

2. rpcType-因为使用该网关的目的是web层转发,所以这里写死http即可

3. httpMethod表示通过get/post方式调用被转发的模块,目前是get

4. method表示调用的url,pageLayout/getAccountTypes与之前配置的模块url组合,就是最终请求到达的url:


dubbo java api网关 dubbo网关方案_ide_06


可以看到,配置了如上的请求头之后,我们成功的转发了服务,并得到了请求的结果:


dubbo java api网关 dubbo网关方案_zookeeper_07


以上就是soul网关的接入及divide模块的配置方法了。