上一期提出了几个问题: 为什么仅仅启动一个 HTTP 服务就可以在 soul-admin 面板里看到暴露的服务?

为什么同时还可以通过另外一个服务访问得到相同的结果?

这三者有什么样的联系?

这些问题的答案就在这期内容中。

soul-examples-http 模块结构和功能

  • soul-examples-http
    • soul-spring-boot-starter-client
      • soul-client-springmvc
        • soul-client-common
          • soul-common

上面就是 soul-examples-http 模块所用到的依赖,可以看到直接引入的是一个自定义的 Spring Boot Starter 项目,这个模块的主要目的是实现自动配置。

比如在配置 application.yml 文件里面的指定属性,然后启动项目之后就可以直接在程序里面拿到配置文件里面的值。

虽然看上去是 Starter 模块实现的,但实际上是借助了 Spring 的配置类注解以及依赖的 soul-spring-boot-springmvc 模块。后面这个模块主要的功能就是从配置文件里面拿到 soul-admin 的 api 服务地址,然后凭借自定义的注解 @SoulSpringMvcClient 扫描获取需要注册的 HTTP 服务转换成 JSON 字符串,最后调用 soul-client-common 模块里面的 OkHttp 工具类把前面的 JSON 字符串注册到 soul-admin 模块上。

这样所有的 HTTP 服务就可以在 soul-admin web 页面上去管理查看了,如果有修改,还会通过 websocket 推送到 soul-bootstrap 模块。

至于最后的 soul-common 模块就是提供一些基本的工具类、配置类、或者公共的 dto 等实体类。

soul-admin 模块结构和功能

  • soul-admin
    • soul-common
    • soul-dashboard 前端模块

这个模块的依赖很简单,soul-common 模块在上面已经提到过了。至于后面的 soul-dashboard 模块是个单独的前端项目,需要打包之后把文件拷贝到 soul-admin 模块下面的 resources/static 目录下面,然后开放一个 GET 请求 api 返回对应的 index.html 页面。

这样就可以在项目启动之后通过浏览器访问地址加载前端的管理界面了。

总的来说,soul-admin 主要对前端管理界面提供 api 服务,以及上面提到的给其他项目的服务提供服务注册的功能,最后还得为 soul-bootstrap 推送注册的服务数据。

soul-bootstrap 模块结构和功能

这个模块的依赖就很多了,有各种插件,有各种适配其他诸如 Spring Gateway 等网关的 Starter,同步数据的插件等等。

尽管依赖很多,但是核心的就一点,作为一个网关承接所有对外的接口服务,这些服务可以是 HTTP 的、Dubbo 的、RPC 等等。

其他程序通过网关去调用接口服务,网关负责接收请求,针对请求进行处理过滤等一些操作,最后去调用真正提供服务的程序,拿到返回结果并且返回。

并且这个模块提供了插拔式的插件机制,可以根据自己的需求去使用各种插件完成不同的任务;同时还可以做负载均衡,路由转发等一些列功能。

值得一提的是,所有的数据的读取都不操作数据库,而是操作内存,能够大大的提高响应速度。

总结

到了这里呢,这次的内容也就结束了。

至于开头提到的几个问题,也都在上面的文字里了。