在Web应用程序之间使用java邮件消息对象

时间:2009-06-30 10:48:28

标签: javamail

我正在开发一个Web应用程序,它充当移动设备的电子邮件客户端。在此应用程序中,用户可以登录并提供大量电子邮件ID以进行监控.Web应用程序中有两个主要类。 1.MailGetter 2.MailFormatter

MailGetter类的行为:

  1. 启动时间任务,每10分钟执行一次
  2. 从数据库中获取众多用于监控的电子邮件ID
  3. 与第一个电子邮件ID的邮件服务器建立连接,并获取最近到达的电子邮件对象
  4. 将邮件对象传递给MailFormatter类
  5. MailFormatter类的行为:

    1. 解析电子邮件对象
    2. 如果消息包含许多多部分以便逐个解析部分,则会进行各种递归调用
    3. 下载附件以及此消息
    4. 将一个xml字符串返回给MailGetter类,该类将存储为具有以下内容的简单文本文件:
    5. 示例:

      <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”类实现为单独的线程,也要考虑在一个收件箱(对于单个emailid)中是否有1000个新电子邮件,它们将调用1000个“MailFormatter”线程,这将使该进程获得更多资源密集的。

      所以我决定从“MailGetter”中拔掉“MailFormatter”。 “MailGetter”将作为单独的Web应用程序在一个服务器中运行,而“MailFormatter”将作为另一个服务器中的单独Web应用程序运行。在获得最近的电子邮件消息对象“MailGetter”之后,Web应用程序将持久存储(通过message.writeTo(FileOutputstream))消息对象,该位置对于“MailFormatter”也是通用的。然后“MailFormatter”类读取(通过MimeMessage(Session,InputStream)构造函数)并逐个解析消息对象,然后将“XML Content”存储在另一个位置,该位置将由“MobileResponderServlet”读取并发送到移动设备。

      这个过程会实时有效吗?这是否会引起问题,特别是在“MailGetter”和“MailFormatter”Web应用程序之间共享消息对象时?如果还有其他方法,请告诉我。此Web应用程序将处理超过5000个用户(至少),他们提供了大量用于监控的电子邮件ID。

1 个答案:

答案 0 :(得分:0)

我认为你能做的唯一实际的事情就是把一些测试场景放在一起。以上内容有太多变数,无法保证与绩效有关的实际答案。

将包含一组测试电子邮件的源邮箱放在一起,然后将一些简单机制联合起来查询,将您的邮件转储出来,然后使用您的第二个进程来使用。这种机制很可能不是你的完整解决方案,但应具有代表性。

最好使这个可重复且一致,因此当您实施真正的解决方案时,您可以研究它是否变慢,和/或基准测量和一致测量。