server端异步执行, 就是将同步阻塞的代码实现, 转为异步的代码实现, 有以下的场景需要异步执行:
-
如果是耗时长的处理, 直接扔到线程池
-
如果实现是调用其他异步服务, 则可以返回被调用服务的异步结果
-
如果实现是做定时定量的批量处理, 则返回批量处理对应的异步结果, 如
IFlusher
类族 -
如果实现是要黏在某个线程来执行, 则返回该线程执行的异步结果, 如
TopicMessagesExecutor
串行执行单topic的消息消费.
- 服务接口
public interface IGuardService {
fun getUserByIdAsync(id: Int): CompletableFuture<User>
}
- 服务实现
class GuardService : IGuardService{
/**
* 根据id获得user
* 单个参数的处理方法
*/
public override fun getUserByIdAsync(id: Int): CompletableFuture<User> {
println("测试调用 CombineService.getUserById($id) 实现, 只执行一次")
val u = User(id, randomString(7))
return CompletableFuture.completedFuture(u)
}
}
注意:
server端异步执行和client端异步调用是相互独立的, 可能client是异步而server端是同步, 也可能相反, 只需要保证方法签名一致就行.
两端根据自己的需要来选择同步还是异步实现.