我想知道其他人是如何做他们的邮件的,你对最佳实践有什么看法。当我考虑如何完成邮寄的事情时,我只能想到一种解决方案,可以通过不同的技术以不同的方式实现。
- 使邮件以某种方式持久化(保存在数据库中,通过 JMS 发送)
- 不断检查(使用调度程序从 DB 或通过 JMS 获取)尚未成功发送的新邮件并尝试发送它们,当发生错误时,稍后再试
希望没有人在没有充分理由的情况下使用的另一个选项是在业务逻辑中发送邮件,并可能导致事务失败(或在特定时间重试发送邮件时需要很长时间),因为邮件无法发送。
在另一个项目中,我看到了一个独立的邮件发件人应用程序,它不断查询数据库并根据当前时间等标准发送电子邮件。
那么您认为什么是好的解决方案,或者您在项目中实际使用了什么?我无法通过谷歌找到任何真实世界的例子,也许我搜索得不够,但如果是这样,请与我分享你的资源!
编辑 要定义“正确的方式”,我想添加一些要求:
- 邮件必须是持久的、可编辑的、可重新发送的
- 根据某些标准,邮件可以在特定时间发送
- 解决方案应水平缩放
EE6 为 EJB 提供 TimerService 和异步操作。通过询问 EE6 环境的“正确方式”,我想知道应该如何使用/实施邮件来满足此类标准要求。
oracle 站点上有一些文章显示了@Async EJB 方法中邮件会话的用法,但这种用法听起来有些错误。我应该使用计时器服务重试发送邮件吗?我应该将邮件保存到数据库并使用间隔计时器来获取并尝试发送它们吗?我应该将邮件的发送移到应用程序之外吗?
我想知道其他人使用什么解决方案,并听取关于对于此类(希望不仅对我而言)常见要求可能是更好或更差的解决方案的意见。