2017-02-17 2 views
1

Я использую весеннее приложение, и у нас есть архитектура SOA на основе REST API. У меня есть API, например, создать пользователя (http://myapp/api/createUser)Как реализовать поведение Async в ответ на отправку электронной почты при возврате ответа в Java

Итак, теперь, когда пользователь создан, нам нужно отправить электронное письмо пользователю прямо сейчас. Я его реализовал, но он ждет, когда метод электронной почты отправит электронное письмо и вернет успех/отказ, который потребляет время.

Пожалуйста, как я могу сразу получить ответ от API сразу, запустив часть электронной почты в потоке и запустив ее в фоновом режиме и отправив письмо пользователю. или если сбой был зарегистрирован в базе данных.

Пожалуйста, предложите мне API или фреймворк, для которого я не хочу реализовывать очередь сообщений, такую ​​как Rabbit MQ или Active Queue. Пожалуйста, поделитесь тем, что не создает проблемы на реальном сервере производства, создавая потоки.

ответ

2

Используйте @Async в своем методе отправки электронной почты.

Ref: http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Async.html

Пример:

@Async 
public void sendNotificaitoin(User user) throws MailException {  
    javaMailSender.send(mail); 
} 

Чтобы включить @Async работать, использовать @EnableAsync в конфигурации.

@SpringBootApplication 
@EnableAsync 
public class SendingEmailAsyncApplication {  
    public static void main(String[] args) { 
     SpringApplication.run(SendingEmailAsyncApplication.class, args); 
    } 
} 

Используйте его, как показано ниже:

 @RequestMapping("/signup-success") 
     public String signupSuccess(){ 

      // create user 
      User user = new User(); 
      user.setFirstName("Dan"); 
      user.setLastName("Vega"); 
      user.setEmailAddress("[email protected]"); 

      // send a notification 
      try { 
       notificationService.sendNotificaitoin(user); 
      }catch(Exception e){ 
       // catch error 
       logger.info("Error Sending Email: " + e.getMessage()); 
      } 

      return "Thank you for registering with us."; 
     } 
+0

Я думаю, что ответ не будет получен недо notificationService.sendNotificaitoin (пользователя); завершено отправка. Подтвердите? и отправить документацию, если это где-то написано. –

+0

нет, пожалуйста, проверите, бег. sendNotificaitoin() отмечен как async(). – mhshimul

+0

Я попытался отладить все еще синхронное поведение. Я поместил @Async в свой метод и, поскольку я не использую весеннюю загрузку, добавила в app-config.xml. Не знаете, где добавить EnableAsync ?. Вы можете помочь. –

Смежные вопросы