0

Spring 3 TaskExecutor を使用して非同期メールを送信するために行ったコードに従います。コードは正常に動作しています。何らかの理由でメールの送信に失敗した場合は、もう一度キューに追加して送信を再試行する必要があるかどうかを知りたいだけです。

Google で検索しましたが、再試行ポリシーに関する情報が得られませんでした。

助けていただければ幸いです!!!

@Service
public class AsyncMailSender implements MailSender {

    /* Logger for Search-Controller Class */
    public static final Logger LOGGER = Logger.getLogger(AsyncMailSender.class);

    @Autowired
    private MailSender mailSender;

    @Autowired
    private TaskExecutor taskExecutor;

    @Autowired
    private VelocityEngine velocityEngine;

    public void send(SimpleMailMessage simpleMessage) throws MailException {
        Map<String, Object> modelMap = new HashMap<String, Object>();
        modelMap.put("user", "Manoj");
        simpleMessage.setText(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "templates/email.vm", modelMap));
        taskExecutor.execute(new AsyncMailTask(simpleMessage));
    }

    public void send(SimpleMailMessage[] simpleMessages) throws MailException {
        for (SimpleMailMessage message : simpleMessages) {
            send(message);
        }
    }

    private class AsyncMailTask implements Runnable {

        private SimpleMailMessage message;

        private AsyncMailTask(SimpleMailMessage message) {
            this.message = message;
        }

        public void run() {
            LOGGER.info("Sending Emails" + message.getSubject());
            mailSender.send(message);
        }
    }
}
4

3 に答える 3

2

私の知る限り、現在、Spring 3 TaskExecutor で再試行を構成する方法はありません。それに関連するSPRがあります。そうは言っても、例外がスローされた場合、Spring はメソッドを自動的に再試行すると思います。例外が繰り返し発生する場合、(リソース消費の点で) 問題になる可能性があります。

于 2013-01-01T14:41:13.600 に答える
0

春はあなたのためにそれをしません

例外処理とキューイングは自分で行う必要があります。それTaskExecutor自体は本質的に再試行可能であり、何があっても次の構成された間隔でタスクを実行するだけです。

于 2013-01-01T20:03:00.750 に答える