我们正在开发一个Web应用程序,该应用程序需要发送用Java / Groovy编写的电子邮件.当前,在调用Java Mail API将邮件发送到SMTP服务器之前,我们将每封电子邮件都保存到数据库中.
我想异步发送电子邮件.我想保留该电子邮件,然后让另一个过程来处理该电子邮件并发送(并且仅发送一次).理想情况下,此过程在我的webapp外部运行.
有什么工具可以做到这一点吗?
更新:此解决方案需要防止重复的电子邮件,并且需要处理电子邮件中的突发事件.我希望有人已经写了一个脱机电子邮件处理器. (我宁愿自己不执行此操作.)
解决方法:
使用cron作业读取数据库的建议是可行的.
这里的另一个好的方法是使用Java消息服务(JMS)消息队列.这些是持久的(由数据库备份)并且可靠.您可以让一个或多个生产者程序将其中包含相关数据的消息排入队列,然后一个或多个使用者处理消息并将其出队.所有这些都是为了获得很高的可靠性而设置的,并且您获得了异步解耦操作的灵活性,这意味着在电子邮件高峰期期间,消息队列可能会变得更大,直到使用者赶上高峰期为止.另一个好处是,电子邮件会在消费者收到邮件后立即发送出去,而不是按计时器发送出去.另外,如果您需要高可用性,则可以有多个使用者,以防万一发生故障.
查看Apache的ActiveMQ,以获取良好的JMS开源实现.