我正在开发一个充当移动电子邮件客户端的 Web 应用程序。在此应用程序中,用户可以登录并提供大量电子邮件 ID 进行监控。Web 应用程序中有两个主要类。1.MailGetter 2.MailFormatter
MailGetter 类的行为:
- Timertask 已启动,每 10 分钟执行一次
- 从数据库中获取大量用于监控的电子邮件 ID
- 为第一个电子邮件 ID 建立与邮件服务器的连接并获取最近到达的电子邮件消息对象
- 将消息对象传递给 MailFormatter 类
MailFormatter 类的行为:
- 解析电子邮件消息对象
- 如果消息有许多多部分,则进行各种递归调用,以便一一解析
- 连同此消息一起下载附件
- 向 MailGetter 类返回一个 xml 字符串,该类将存储为具有以下内容的简单文本文件:
例子:
<mail>
<from>FromEmailID</from>
<to>ToEmailID</to>
<subject>Subject</subject>
<body>Email Body</body>
<attachments>
attachment
</attachments>
</mail>
MobileResponderServlet:Web 应用程序中还编写了一个单独的 servlet,它将读取简单的 xml 文本文件并将读取的内容发送到移动设备
此应用程序的主要缺点可能是“MailGetter”类将等待“MailFormatter”类的所有函数(包括递归调用)执行完毕。一旦控件从“MailFormatter”类返回到“MailGetter”类,它将从邮件服务器获取下一个消息对象并将其传递给“MailFormatter”类。因此向移动用户提示新电子邮件会消耗时间。即使“MailFormatter”类被实现为一个单独的线程,考虑在单个收件箱中是否有 1000 封新电子邮件(对于单个 emailid),这将调用 1000 个“MailFormatter”线程,这将使进程获得更多资源密集的。
所以我决定从“MailGetter”中拔出“MailFormatter”。“MailGetter”将作为单独的 Web 应用程序在一个服务器中运行,而“MailFormatter”将作为单独的 Web 应用程序在另一台服务器中运行。在获得最近的电子邮件消息对象“MailGetter”后,Web 应用程序(通过 message.writeTo(FileOutputstream))将消息对象保留在“MailFormatter”也常见的位置。然后“MailFormatter”类读取(通过 MimeMessage(Session,InputStream) 构造函数)并逐个解析消息对象,然后将“XML 内容”存储在另一个位置,该位置将由“MobileResponderServlet”读取并发送到移动设备。
这个过程会实时有效吗?这是否会出现问题,尤其是在“MailGetter”和“MailFormatter”Web 应用程序之间共享消息对象时?如果还有其他方法,请告诉我。此 Web 应用程序将处理 5000 多个用户(最少),这些用户提供了大量的电子邮件 ID 进行监控。