RPC如何实现一个方法定义,调用时既能同步又能异步?

在应用开发的时候,经常定义了一个接口方法,我们想这个方法即可同步调用,又可异步调用。

通常的解决方案就是写两个方法,一个是同步的,一个是异步的,如下:

public interface HelloService {

    public String getName();

    public CompletableFuture getNameAsync();

}

但是这种方式明显属于重复劳动,接口开发人员会很不爽,国信zebra提供了一个优雅的方式。

接口定义是只要定义一个方法

public interface HelloService {

    public String sayHello(HelloRequest req);

}

在RPC远程调用时,只需要将注解上添加异步标识,如下:

//spring注入代码

@ZebraReference(retries = 3, async = true)

private HelloService helloService;

//调用示例

public void testAsync(){

    HelloRequest req = new HelloRequest();

    req.setName("邓启翔");

    helloService.sayHello(req);

    CompletableFuture future = RpcContext.getContext().getFuture();

    HelloReply rep = (HelloReply) future.get();//得到结果

}

zebra的实现的思想是


RPC如何实现一个方法定义,调用时既能同步又能异步?_第1张图片
RPC如何实现一个方法定义,调用时既能同步又能异步?_第2张图片
Zebra


RPC如何实现一个方法定义,调用时既能同步又能异步?_第3张图片

你可能感兴趣的:(RPC如何实现一个方法定义,调用时既能同步又能异步?)