soul-网关实战(一)学习路线

学习开源项目该如何下手1

为什么要学习开源项目?答案想必不用多说,但如果我们的业务系统已经投入使用或者打算投入使用,仅仅知道如何使用远远不够,你必须掌握他的实现原理和很多细节,这样才能有良好的使用体验。很简单的一个例子,当你的系统出现问题,又恰恰在度娘上找不到答案时,如果你明白它的实现原理,就很容易根据一些现象来排查问题原因。那么怎么样学习开源项目呢?接下来分享一些个人的学习路线。

阅读文档

通过阅读开源项目的相关文档(一定要是官方文档),通过看文档,你可以快速地掌握这个软件整体的结构,它有哪些功能特性,它涉及到的关键技术、实现原理和它的生态系统等等。在掌握了这些之后,你对它有个整体的了解,然后再去看它的源代码,就不会再有那种盲人摸象找不到头绪的感觉了。那么我们在阅读文档应该注意什么呢?

了解项目的整体

  1. 这个项目是干什么的? ,最好能知道这个项目的来龙去脉;
  2. 能解决哪些问题?
  3. 适合在哪些场景使用?
  4. 有哪些功能?
  5. 如何使用?

基本概念或者名词

你需要找到这个项目用到的一些基本概念或者名词的介绍文档,因为开源社区的开发者都有个爱好:发明概念。很多开源项目都会自己创造一些名词或者概念,了解这些基本概念才有可能看懂它项目的其他文档。比如说soul官方文档中提到的:元数据、选择器与规则等等

项目涉及自己不熟悉的技术栈

通过看文档,从中找到自己不熟悉的技术栈,提前进行了解,做一些知识储备,方便后面阅读源码少一些障碍。

实战练习

由于前面已经对项目做了充分的了解,通过阅读相关性的文档,知道项目都具有哪些功能,接下来可以趁热打铁,快速的进行入门级别的实战练习,根据官方提供的入门demo切实的感受一把。

源码拉取

fork

git clone https://github.com/jcmob-afj/soul.git
cd soul
git fetch master
git checkout master

项目编译

mvn clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true

运行示例

1.找到soul-admin项目,修改 /resources/application-local.yml 数据库链接,运行SoulAdminBootstrap.java 的main方法

spring:
  thymeleaf:
    cache: true
    encoding: utf-8
    enabled: true
    prefix: classpath:/static/
    suffix: .html
  datasource:
    url: jdbc:mysql://localhost:3306/soul?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

2.找到soul-bootstrap项目,运行SoulBootstrapApplication.java 的main方法
3.找到soul-examples项目,我们这里选择http用户的接入方式,所以需要找到soul-examples-http项目,运行SoulTestHttpApplication.java 的main方法
效果
4.访问http://localhost:9095/#/user/login 你会看到下图的登录页面,系统默认内置管理员账号「admin/123456」
在这里插入图片描述
5.保证divide插件的状态为开启
divide
6.在插件列表中找到divide插件,你会发现soul-client会自动扫描带有@SoulSpringMvcClient 注解的接口服务。默认在选择器列表添加一个选择器,默认将扫描到的接口服务添加到选择器规则列表中。

在这里插入图片描述
7.访问网关地址:http://localhost:9195/http/order/findById?id=1 ,你会发现请求已经转发到soul-examples-http 端口为8188 项目的/order/findById 方法中

    /**
     * Find by id order dto.
     *
     * @param id the id
     * @return the order dto
     */
    @GetMapping("/findById")
    @SoulSpringMvcClient(path = "/findById", desc = "Find by id")
    public OrderDTO findById(@RequestParam("id") final String id) {
        OrderDTO orderDTO = new OrderDTO();
        orderDTO.setId(id);
        orderDTO.setName("hello world findById");
        return orderDTO;
    }

在这里插入图片描述
根据SoulBootstrapApplication :控制台也可以看出,请求已经被路由转发

2021-01-14 23:32:58.816  INFO 12256 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 9195
2021-01-14 23:32:58.819  INFO 12256 --- [           main] o.d.s.b.SoulBootstrapApplication         : Started SoulBootstrapApplication in 7.167 seconds (JVM running for 10.286)
2021-01-14 23:48:51.505  INFO 12256 --- [-work-threads-1] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http
2021-01-14 23:48:51.506  INFO 12256 --- [-work-threads-1] o.d.soul.plugin.base.AbstractSoulPlugin  : divide selector success match , selector name :/http/order/findById
2021-01-14 23:48:51.516  INFO 12256 --- [-work-threads-1] o.d.s.plugin.httpclient.WebClientPlugin  : you request,The resulting urlPath is :http://172.16.51.131:8188/order/findById?id=1, retryTimes: 0

8.到这里我们只看官网的例子,就可以很简单的进行divide插件测试,是不是很简单。

源码刨析

当我们根据官方文档,将每个用户怎么接入各种插件,都演示一遍后。根据我们的演示的结果,提出自己的疑问,比如说divide插件到底是在能不能进行路由转发,答案当然是可以的,因为我们已经动手实践了,那么此时你就可以带着问题以及结果,去猜想到底是哪个项目起到了转发的效果,debug去跟一下。使用这种以问题为阅读单元的方式来读源代码,你每次只要花很短的时间,阅读很少的一部分源码,就能解决一个问题,得到一些收获。这种方式其实是通过一个一个的问题,在网状的源代码中,每次去读几个点组成的那一两条线。随着你通过阅读源码了解的问题越来越多,你对项目源码的理解也会越来越全面和深入。

学习路线思维导图

学习导图


  1. 消息队列高手课 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

健身的IT鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值