Skip to content

Latest commit

 

History

History
44 lines (30 loc) · 1.35 KB

async-execute.md

File metadata and controls

44 lines (30 loc) · 1.35 KB

异步执行

server端异步执行, 就是将同步阻塞的代码实现, 转为异步的代码实现, 有以下的场景需要异步执行:

  1. 如果是耗时长的处理, 直接扔到线程池

  2. 如果实现是调用其他异步服务, 则可以返回被调用服务的异步结果

  3. 如果实现是做定时定量的批量处理, 则返回批量处理对应的异步结果, 如 IFlusher类族

  4. 如果实现是要黏在某个线程来执行, 则返回该线程执行的异步结果, 如TopicMessagesExecutor串行执行单topic的消息消费.

定义CompletableFuture返回类型的接口

  1. 服务接口
public interface IGuardService {
  fun getUserByIdAsync(id: Int): CompletableFuture<User>
}
  1. 服务实现
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端是同步, 也可能相反, 只需要保证方法签名一致就行.

两端根据自己的需要来选择同步还是异步实现.