从 Spring 引导控制器发送响应 200 以进行异步处理

Send an response 200 from a Spring boot controller for asyncronus processing

我有一个场景: 我有一个控制器。 我的控制器正在调用服务 class.Service class 将从数据库中获取所有记录并将其 post 到 kafka.But 我不希望我的客户调用 api 等待整个数据 posted 到 kafka。我希望它以异步方式进行。客户端的工作只是调用 api 而已。我们会立即发送200响应码。

在后端,从数据库中获取数据并处理到卡夫卡将会发生。 你能否建议如何做到这一点。

public class SampleController {

    private  SampleService sampleService;
        @PostMapping("/")
        public String handleAsyncResponse(@RequestBody Requestbean bean) {
        sampleService.posttokafka(bean);
    }
}

谢谢

可以通过@Async方式实现如下,先定义一个bean:

@Configuration
public class SThreads {
    @Bean
    public TaskExecutor concurrentTasks() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(4);
        executor.setMaxPoolSize(4);
        executor.setThreadNamePrefix("default_task_executor_thread");
        executor.initialize();
        return executor;
    }
}

然后用 @Async("concurrentTasks")

注释任务
@Async("concurrentTasks")
public static void myAsyncTask() throws ExecutionException, InterruptedException {
    ....
}

然后你可以调用myAsyncTask,它不会阻塞调用者。