Spring 启动发送异步任务



我需要在弹簧启动休息中发送电子邮件/短信/事件作为后台异步任务。

我的 REST 控制器

@RestController
public class UserController {
    @PostMapping(value = "/register")
    public ResponseEntity<Object> registerUser(@RequestBody UserRequest userRequest){
       // I will create the user
        // I need to make the asyn call to background job to send email/sms/events
        sendEvents(userId, type) // this shouldn't block the response.
        // need to send immediate response
        Response x = new Response();
        x.setCode("success");
        x.setMessage("success message");
        return new ResponseEntity<>(x, HttpStatus.OK);
    }
}

如何在不阻止响应的情况下进行发送事件(无需仅获取后台任务的返回(?

发送事件 - 调用短信/电子邮件第三方 API 或将事件发送到 kafka 主题。

谢谢。

听起来像是Spring @Async注释的完美用例。

@Async
public void sendEvents() {
   // this method is executed asynchronously, client code isn't blocked
}

重要提示@Async仅适用于公共方法,不能从单个类内部调用。如果将 sendEvents() 方法放在 UserController 类中,它将同步执行(因为绕过了代理机制(。创建一个单独的类来提取异步操作。

为了在 Spring 引导应用程序中启用异步处理,您必须使用适当的注释标记主类。

@EnableAsync
public class Application {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.run(args);
    }
}

或者,您也可以将@EnableAsync批注放在任何@Configuration类上。结果将是一样的。

相关内容

  • 没有找到相关文章

最新更新