【RPC实战与核心原理】-第17讲-压榨单机吞吐量

异步调用是怎么做的?

调用端

调用端发送请求以及调用端接收返回的结果,这两个过程,在RPC当中本来就是由2个不同的线程来处理的,所以在这种天然的隔离了的情况下,调用端的异步是通过,发送请求的时候,每个请求本身会有一个消息的标识ID,同时在发送请求之前,调用端会创建一个FUTURE对象,然后将这个标识ID和这个FUTURE对象做一个映射。 然后调用端获取返回结果的方式,就是通过调用这个FUTURE对象的GET方法,来直接获取到返回的Response。 因此,站在调用端的角度去看,所谓的一次RPC调用是异步还是同步,无非就是调用端是主动去调用这个Future对象的get方法等待、还是说不主动去调用这个get方法。

那么调用端的异步处理就完成了,服务端呢?

服务端

服务端在做异步的时候,我们猜测也猜测得到,就是请求过来的时候,塞入到线程池中去,然后在线程内处理完之后,将结果包装好在返回给到调用方,具体是怎样的呢? 调用端在调用服务端的时候,服务端会直接创建一个CompletableFuture对象,然后将这个CompletableFuture对象直接返回给到调用端,之后,服务端就会在线程池里面处理这个业务逻辑,业务逻辑处理完了,就直接调用CompletableFuture对象的Complete方法,来完成通知

总结

一个异步的RPC调用,得从调用端和服务端双方共同着手完成,而他们异步之后,能够产生回调通知的关键,还是需要Future的支持,帮完成异步之后的信息返回;

经验分享 程序员 微信小程序 职场和发展