soul网关-1

以前接手过一个网关系统里面一个子系统的维护工作,后来没多久就移交出去给别人了,也没太细看里面的源码。本次学习一下soul网关源码的机会,补足一下自己在网关方面的知识欠缺。

一个网关应该具有以下基本功能:

  • 路由转发
  • 限流熔断
  • 日志监控
  • 安全认证

首先,看一下soul官网的介绍,soul网关除了以上基本功能之外,还有一些其他的特性:

  • 支持各种语言(http协议),支持 dubbo,springcloud协议
  • 插件化设计思想以及丰富的插件支持
  • 流量配置动态化
  • 支持A/B Test

后面几篇笔记将针对网关的基本功能以及soul网关的其他特性进行学习。本文主要是初步入手了解一下。

本文先大致看一下soul网关源码的结构:

  • soul-admin是网关的管理后台
  • soul-bootstrap是网关启动模块,它的pom里面依赖了其他的功能包
  • soul-client里面是一些Spring MVC,Dubbo,SpringCloud的用户快捷使用soul网关的代码
  • soul-common里面是一些通用类
  • soul-dist是用于启动或者停止项目的一些脚本及配置参数
  • soul-metrics里面用于实现监控和统计的代码
  • soul-example是一些示例项目
  • soul-plugin是提供的一些插件
  • soul-register-center顾名思义是注册中心
  • soul-spi是定义soul spi
  • soul-spring-boot-start是spring boot启动器
  • soul-sync-data-center是数据同步相关的代码
  • soul-web里面包括插件、路由转发等代码

我们来将这个项目实际运行一下,体验一下:

  1. 先将代码clone下来

  2. 执行下面这个命令编译安装一下。命令里面skip掉一些东西,可以加快速度

mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true
  1. 启动一下soul-admin模块

运行之前,需要修改application.yml里面的数据库地址、端口、用户名密码,都改成你自己的数据库的配置

soul网关-1_第1张图片

注意:此处需要将jdbc链接改一下,在后面加上zeroDateTimeBehavior=convertToNull,否则在之后会报can not be represented as java.sql.Timestamp错误

运行成功之后,可以看到数据库里多了一个soul数据库,里面有一些表。(以后的笔记里面会学习相关的知识)

如果不想用mysql的话,它里面还有一个application-h2.yml配置,修改那个配置文件就行了。

application.yml里面可以看到,soul-admin管理后台在9095端口启动了。我们可以在浏览器里面访问一下http://localhost:9095/#/user/login,可以看到登录界面。登录的用户名密码是admin/123456

soul网关-1_第2张图片

进管理后台看一下,基本上各个tab里面啥也没有,因为我们还没启动网关,也没把业务的api放进来

  1. 启动一下soul-bootstrap模块

从配置文件里面看下,它启动在了9195端口

  1. 我们启动soul-example/soul-example-http这个模块看一下,这个模块就相当于我们平常的springboot项目。

这个soul-example-http启动在了8188端口,从源码里面看下它有两个controller,可以点进去看一下提供了什么API。例如OrderController里面提供了一个/test/order/findById这个API。

先试一下soul-example-http这个服务本身的API能否调用。在浏览器里面试一下http://localhost:8188/order/findById?id=1

soul网关-1_第3张图片

再试一下请求能否通过网关正常转发给soul-example-http这个服务。在soul-example-http的配置文件里面看到这个服务在网关那边的appName是http, 所以在浏览器里面试一下http://localhost:9195/http/order/findById?id=1

soul网关-1_第4张图片

可以看到有结果返回,而且从IDEA的控制台的日志里面也可以看到,请求被成功转发了。

再回去soul-admin管理后台看一下,可以看到soul-example-http这个里面的两个controller提供的API都已经可以在divide这个tab里面看到了

本文就先到此结束,后续对各个模块继续深究一下。

你可能感兴趣的:(Java,网关)