2017-02-17 14 views
1

私はSpringアプリケーションを使用しており、REST APIに基づくSOAアーキテクチャを使用しています。私はAPIを持っています。ユーザーを作成します。(http://myapp/api/createUserJavaのレスポンス返信中にメールを送信するための非同期動作の実装方法

ユーザーが作成されたらすぐにユーザーに電子メールを送信する必要があります。私は実装しましたが、メールを送信して成功/失敗は時間を消費する。

スレッドから電子メールの部分を開始し、バックグラウンドで実行してユーザーにメールを送信することで、すぐにAPIからの応答を返すことができます。または失敗した場合は、データベースにログインします。

ラビットMQやアクティブキューのようなメッセージングキューを実装したくないというAPIやフレームワークを教えてください。 ライブプロダクションサーバで問題を発生させない実装をスレッドを生成して共有してください。

答えて

2

あなたのメール送信方法で@Asyncを使用してください。

参考: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); 
} 

あなたの設定で@EnableAsyncを使用し、動作するように@Asyncを有効にします。

@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?をどこに追加するのか分かりません。お願いします。 –