痛点:正常接口返回给前端,前端根据返回码判断是否ok即可;
对于要处理流任务, 接口在什么时候返回呢?
- 流处理后?那么接口会等待处理完成后返回,这时接口大概率是会超时;
- 返回void类型,这时前端没有返回码,然后也会报错;
处理这种问题,我们需要知道return语句是在什么时候返回的就可以了;
简单理解return语句是在主线程返回,那么我们是不是可以在创建一个子线程去处理流任务,而主线程进行返回呢?
我们其实只需要一个线程就可以处理该问题:新建一个线程池,或者也可以创建一个单线程, 然后让该线程去执行任务,我们的接口正常返回即可;
ExecutorService executor = Executors.newFixedThreadPool(1);
executor.execute(new Runnable() { @SneakyThrows @Override public void run() { kafkaService.consumeKafka(topic, address); } }); return ResponseMessage.successMessage("监听topic:{}的kafka成功", topic);