gpt4 book ai didi

java 可扩展的电子邮件通知应用程序

转载 作者:行者123 更新时间:2023-12-01 14:32:14 25 4
gpt4 key购买 nike

我需要设计和开发一个 Java 应用程序,该应用程序可以在特定日期向用户发送电子邮件通知。该信息存储在 Oracle 11g 数据库中。有一个包含通知记录的表,每个记录都有一个“截止日期”。“截止日期”只是应发送通知的日期(日/月/年)。

电子邮件服务器将可用于发送电子邮件。

该应用程序 future 需要可扩展,因为它每天可能会发送数千封电子邮件。该应用程序还需要 记录通知是否发送失败,以便稍后重试发送。

Java 应用程序将托管在 Oracle Weblogic 10 上

设计或思考解决此问题的最佳方法是什么?

我考虑过使用 JMS,但不确定我是否过度设计了问题(您如何处理失败的电子邮件?)。

当然,我可以编写一个简单的 Java 应用程序,该应用程序将读取数据库表,获取要在该日期发送的所有通知,将它们存储在数组中,然后循环并开始在电子邮件中发送每个通知。感觉这种开发应用程序的方式非常原始并且无法扩展。我想问题的关键在于该解决方案应该能够处理每天发送数千封电子邮件的情况。

最佳答案

如果您希望将发送大量电子邮件的工作分散到多个进程和/或线程上,那么使用 JMS 队列将是协调工作的一种潜在有效方法。它可以均匀地分散负载,如果多个接收器正在处理工作,它还可以提供容错能力。

但是,一些困难可能包括以下内容:

  • 一般情况下,不保证 JMS 消息接收是有序的。稍后发送的通知可能会在较早通知之前发送。
  • 维护数据库表和队列之间的协调可能很困难。针对表的每次插入/更新/删除可能还需要将消息发布到队列中。
  • 可能不希望将所有 future 的请求立即发布到队列中。
  • 可能需要一种机制来传播已取消的请求到队列中。

一种可能的解决方案:

让高效、灵活的前端进程经常读取该表并确定哪些通知即将到期。理想情况下,数据库表将被索引和/或分区以优化该查询。仅将这些数据发布到 JMS 队列。队列中的消息包含对数据库行的引用。服务进程在执行通知之前检索数据库行,从而检测更改/取消。

这种方法的致命弱点是前端流程。必须努力确保它始终运行并且本身具有容错能力。此外,前端必须有足够的吞吐量来在任何给定时刻处理整个负载。如果这是不可能的,则可能需要多个前端进程。这些可以轮流(例如,奇数分钟、偶数分钟等),也可以由另一个队列自行协调。

关于java 可扩展的电子邮件通知应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16781740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com