Soul网关源码学习【第四篇】-sofa示例

本文详细介绍了Soul网关对SOFA RPC框架的支持,包括SOFA的特性、如何在Soul网关中配置SOFA插件、创建SOFA示例项目并调试。在调试过程中,作者发现并解决了一个可能导致无响应的问题,强调了响应式编程在Soul中的应用。
摘要由CSDN通过智能技术生成

sofa示例演示

什么是sofa

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

功能特性

  • 透明化、高性能的远程服务调用
  • 支持多种服务路由及负载均衡策略
  • 支持多种注册中心的集成
  • 支持多种协议,包括 Bolt、Rest、Dubbo 等
  • 支持同步、单向、回调、泛化等多种调用方式
  • 支持集群容错、服务预热、自动故障隔离
  • 强大的扩展功能,可以按需扩展各个功能组件
Soul网关对于sofa的支持
  1. 在我们网关的项目soul-bootstrap中增加如下依赖:
    	   <dependency>
               <groupId>com.alipay.sofa</groupId>
               <artifactId>sofa-rpc-all</artifactId>
               <version>5.7.6</version>
           </dependency>
           <dependency>
               <groupId>org.apache.curator</groupId>
               <artifactId>curator-client</artifactId>
               <version>4.0.1</version>
           </dependency>
           <dependency>
               <groupId>org.apache.curator</groupId>
               <artifactId>curator-framework</artifactId>
               <version>4.0.1</version>
           </dependency>
           <dependency>
               <groupId>org.apache.curator</groupId>
               <artifactId>curator-recipes</artifactId>
               <version>4.0.1</version>
           </dependency>
           <dependency>
               <groupId>org.dromara</groupId>
               <artifactId>soul-spring-boot-starter-plugin-sofa</artifactId>
               <version>${last.version}</version>
           </dependency>
    
  2. 在我们的后台管理系统开启sofa插件
    • 首先在 soul-admin 插件管理中,把sofa 插件设置为开启。
    • 其次在 sofa 插件中配置你的注册地址或者其他注册中心的地址.
      {"protocol":"zookeeper","register":"127.0.0.1:2181"}
      
sofa示例项目:soul-examples-sofa
  1. 引入Soul的依赖
        <dependency>
           <groupId>org.dromara</groupId>
           <artifactId>soul-spring-boot-starter-client-sofa</artifactId>
           <version>${soul.version}</version>
       </dependency>
    
  2. 配置Soul,在yml文件中新增如下配置
     soul:
       sofa:
         adminUrl: http://localhost:9095
         contextPath: /sofa
         appName: sofa
      # adminUrl: 为你启动的soul-admin 项目的ip + 端口,注意要加 http://
      # contextPath: 为你的这个项目在soul网关的路由前缀,这个你应该懂意思把? 比如/order ,/product 等等,网关会根据你的这个前缀来进行路由.
      # appName:你的应用名称,不配置的话,会默认取sofa配置中application 中的名称
    
  3. 接口注册到网关
    你sofa服务实现类的,方法上加上 @SoulSofaClient 注解,表示该接口方法注册到网关。
  4. 启动示例项目,输出日志 sofa client register success,且sofa接口已经发布到 soul网关,大功告成。
调试

通过Debug跟踪调用方法,可以发现存在以下的调用链

SoulWebHandler.execute() --> AbstractSoulPlugin.execute() --> SofaPlugin.doExecute() --> SofaProxyService.genericInvoker() --> 调用到我们定义的方法。

前面两步就不看了,是Soul匹配插件的一个过程,我们从SofaPlugin.doExecute()开始看。

  • 首先获取Body,里面是我们的参数(如果有参数的话)
  • 然后拿到我们注册的MetaData,里面就是我们的方法。
    在这里插入图片描述
  • 如果MetaData为空,或者MateData里面的ServiceName和methodName为空,就返回错误。
  • 如果参数类型不为空,但是Body为空,就返回错误。
  • 调用SofaProxyService,返回相应。
    @Override
    protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) {
   
        String body = exchange.getAttribute(Constants.SOFA_PARAMS);
        SoulContext soulContext = exchange.getAttribute(Constants.CONTEXT);
        assert soulContext != null;
        MetaData metaData = exchange.getAttribute
SOFABolt 是蚂蚁金融服务集团开发的一套基于 Netty 实现的网络通信框架。 为了让 Java 程序员能将更多的精力放在基于网络通信的业务逻辑实现上,而不是过多的纠结于网络底层 NIO 的实现以及处理难以调试的网络问题,Netty 应运而生。 为了让中间件开发者能将更多的精力放在产品功能特性实现上,而不是重复地一遍遍制造通信框架的轮子,SOFABolt 应运而生。 Bolt 名字取自迪士尼动画-闪电狗,是一个基于 Netty 最佳实践的轻量、易用、高性能、易扩展的通信框架。 这些年我们在微服务与消息中间件在网络通信上解决过很多问题,积累了很多经验,并持续的进行着优化和完善,我们希望能把总结出的解决方案沉淀到 SOFABolt 这个基础组件里,让更多的使用网络通信的场景能够统一受益。 目前该产品已经运用在了蚂蚁中间件的微服务 (SOFARPC)、消息中心、分布式事务、分布式开关、以及配置中心等众多产品上。 SOFABolt的基础功能包括: 1、基础通信功能 ( remoting-core ) 基于 Netty 高效的网络 IO 与线程模型运用 连接管理 (无锁建连,定时断链,自动重连) 基础通信模型 ( oneway,sync,future,callback ) 超时控制 批量解包与批量提交处理器 心跳与 IDLE 事件处理 2、协议框架 ( protocol-skeleton ) 命令与命令处理器 编解码处理器 心跳触发器 3、私有协议定制实现 - RPC 通信协议 ( protocol-implementation ) RPC 通信协议的设计 灵活的反序列化时机控制 请求处理超时 FailFast 机制 用户请求处理器 ( UserProcessor ) 双工通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值