蚂蚁金服SOFA-Boot整合SOFA-RPC(中篇)

本文详述SOFA-Boot如何整合SOFA-RPC,涵盖单向、同步、Future、回调四种调用机制,以及泛化调用和过滤器配置。适合理解SOFA-RPC的高级特性和实践应用。
摘要由CSDN通过智能技术生成

前言

上篇文章简单地介绍了 SOFA-Boot 的功能特性,对 Readiness 健康检查的配置举例说明。重点介绍了如何在 SOFA-Boot 中引入 SOFA-RPC 中间件,给出了基于 bolt、rest 和 dubbo 等不同协议通道的服务发布与消费的全流程。

12738336-7064e5422ef4f6c4
image

本文将进一步介绍 SOFA-RPC 中间件提供的丰富而强大的功能,包括单向调用、同步调用、Future调用、回调,泛化调用,过滤器配置等。

正文

1. 调用方式

SOFA-RPC 提供单向调用、同步调用、异步调用和回调四种调用机制。为了区分四者的不同之处,这里给出 SOFA 官方提供的原理图。

12738336-43d96c70633d81c1
image

下面给出详细阐述和配置说明:

1.1. 单向方式

当前线程发起调用后,不关心调用结果,不做超时控制,只要请求已经发出,就完成本次调用。目前支持 bolt 协议。

配置说明

使用单向方式需要在服务引用的时候通过 sofa:global-attrs 元素的 type 属性声明调用方式为 oneway ,这样使用该服务引用发起调用时就是使用的单向方式了。

<sofa:reference id="helloOneWayServiceReference" interface="com.ostenant.sofa.rpc.example.invoke.HelloOneWayService">
    <sofa:binding.bolt>
        <sofa:global-attrs type="oneway"/>
    </sofa:binding.bolt>
</sofa:reference>
适用场景

单向调用不保证成功,而且发起方无法知道调用结果。因此通常用于可以重试,或者定时通知类的场景,调用过程是有可能因为网络问题,机器故障等原因,导致请求失败。业务场景需要能接受这样的异常场景,才可以使用。

1.2. 同步方式

当前线程发起调用后,需要在指定的超时时间内,等到响应结果,才能完成本次调用。如果超时时间内没有得到结果,那么会抛出超时异常。

配置说明

服务接口与实现类

SOFA-RPC 缺省采用的就是同步调用,可以省略 sofa:global-attrs 配置项。

服务端发布配置

<bean id="helloSyncServiceImpl" class="com.ostenant.sofa.rpc.example.invoke.HelloSyncServiceImpl"/>
<sofa:service ref="helloSyncServiceImpl" interface="com.ostenant.sofa.rpc.example.invoke.HelloSyncService">
    <sofa:binding.bolt/>
</sofa:service>

客户端引用配置

<sofa:reference id="helloSyncServiceReference" interface="com.ostenant.sofa.rpc.example.invoke.HelloSyncService">
    <sofa:binding.bolt/>
</sofa:reference>

服务端启动入口

SpringApplication springApplication = new SpringApplication(SyncServerApplication.class);
ApplicationContext applicationContext = springApplication.run(args);

客户端启动入口

SpringApplication springApplication = new SpringApplication(SyncClientApplication.class);
ApplicationContext applicationContext = springApplication.run(args);

客户端调用

HelloSyncService helloSyncServiceReference = (HelloSyncService) applicationContext.getBean("helloSyncServiceReference");
System.out.println(helloSyncServiceReference.saySync("sync"));
适用场景

同步调用是最常用的方式。注意要根据对端的处理能力,合理设置超时时间。

1.3. Future方式

Future 方式下,客户端发起调用后不会等待服务端的结果,继续执行后面的业务逻辑。服务端返回的结果会被 SOFA-RPC 缓存,当客户端需要结果的时候,需要主动获取。目前支持 bolt 协议。

配置说明

服务接口和实现类

HelloFutureService.java

public interface HelloFutureService {
    String sayFuture(String future);
}

HelloFutureServiceImpl.java

public class HelloFutureServiceImpl implements HelloFutureService {
    @Override
    public String sayFuture(String future) {
        return future;
    }
}

服务端发布配置

<bean id="helloFutureServiceImpl" class="com.ostenant.sofa.rpc.example.invoke.HelloFutureServiceImpl"/>
<sofa:service ref="helloFutureServiceImpl" interface="com.oste
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值