从 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,它不会阻塞调用者。
我有一个场景: 我有一个控制器。 我的控制器正在调用服务 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,它不会阻塞调用者。