目标

  • 体验 sofa 插件
  • 分析 sofa 接口如何注册到网关
  • 分析 sofa 插件 如何代理 sofa 服务
  • 总结

idea 查看对象之间的依赖关系图

关于 SOFARPC

简介

SOFARPC 是一个高可扩展性、高性能、生产级的 Java RPC 框架。在蚂蚁金服 SOFARPC 已经经历了十多年及五代版本的发展。SOFARPC 致力于简化应用之间的 RPC 调用,为应用提供方便透明、稳定高效的点对点远程服务调用方案。为了用户和开发者方便的进行功能扩展,SOFARPC 提供了丰富的模型抽象和可扩展接口,包括过滤器、路由、负载均衡等等。同时围绕 SOFARPC 框架及其周边组件提供丰富的微服务治理方案。

Soul网关源码解析(四)接入Sofa服务 - 图1

功能特性

  • 透明化、高性能的远程服务调用
  • 支持多种服务路由及负载均衡策略
  • 支持多种注册中心的集成
  • 支持多种协议,包括 Bolt、Rest、Dubbo 等
  • 支持同步、单向、回调、泛化等多种调用方式
  • 支持集群容错、服务预热、自动故障隔离
  • 强大的扩展功能,可以按需扩展各个功能组件

相比DUBBO它没有这么多历史的包袱,代码更加简洁,设计思路更加清晰,更加容易去理解其中的代码。

本篇所提的 sofa 服务均为 sofa rpc 服务。

体验网关代理 sofa 服务

1、启动 zookeeper,默认端口2181

2、启动 soul-admin,将 sofa 插件设置为启用,使用默认配置

3、soul-bootstrap 引入依赖后启动

  1. <dependency>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>sofa-rpc-all</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.apache.curator</groupId>
  7. <artifactId>curator-client</artifactId>
  8. <version>${curator.version}</version>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.apache.curator</groupId>
  12. <artifactId>curator-framework</artifactId>
  13. <version>${curator.version}</version>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.apache.curator</groupId>
  17. <artifactId>curator-recipes</artifactId>
  18. <version>${curator.version}</version>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.dromara</groupId>
  22. <artifactId>soul-spring-boot-starter-plugin-sofa</artifactId>
  23. <version>${project.version}</version>
  24. </dependency>

4、找到 soul-examples 模块里的 soul-examples-sofa ,启动服务

输出日志 sofa client register success 提示注册成功

Soul网关源码解析(四)接入Sofa服务 - 图2

5、查看注册的三支 sofa 服务

Soul网关源码解析(四)接入Sofa服务 - 图3

6、通过网关访问 sofa 服务,成功

Soul网关源码解析(四)接入Sofa服务 - 图4

同时 soul-bootstrap 输出选择器和规则成功匹配日志

Soul网关源码解析(四)接入Sofa服务 - 图5

sofa 接口如何注册到网关

SofaServiceBeanPostProcessor 构造时组织元数据注册地址

Soul网关源码解析(四)接入Sofa服务 - 图6

SofaServiceBeanPostProcessor 实现 BeanPostProcessor,容器初始化后进行注册

Soul网关源码解析(四)接入Sofa服务 - 图7

RegisterUtils 借助 OkHttpTools 将元数据 post 到 soul-admin

Soul网关源码解析(四)接入Sofa服务 - 图8

总结一下,sofa client 通过容器初始化时获取 SoulSofaClient,结合 serviceBean 和 方法组织元数据,最后通过 OkHttpTools 将元数据 post 到 soul-admin

sofa 插件代理 sofa 服务

未完待续…