我有一个要求,其中我想读取来自 Outlook 的传入电子邮件,然后进行一些处理。我正在使用 JavaMail API 和 IMAP 协议来实现这一点。我编写了一个 java 类,它在 messagesAdded 事件上读取电子邮件。
它在单服务器环境中与下面的代码完美配合,但是当我将它部署到我们有两台服务器的生产环境中时,我最终会处理每封电子邮件两次,因为两台服务器上都部署了相同的代码,一旦收到电子邮件,两者都会尝试阅读在邮箱中。
下面是我用来连接邮箱和阅读电子邮件的代码片段:
try {
Properties props = System.getProperties();
// Get a Session object
Session session = Session.getInstance(props, null);
// session.setDebug(true);
// Get a Store object
Store store = session.getStore("imap");
// Connect
store.connect(argv[0], argv[1], argv[2]);
// Open a Folder
Folder folder = store.getFolder(argv[3]);
if (folder == null || !folder.exists()) {
System.out.println("Invalid folder");
System.exit(1);
}
folder.open(Folder.READ_WRITE);
// Add messageCountListener to listen for new messages
folder.addMessageCountListener(new MessageCountAdapter() {
public void messagesAdded(MessageCountEvent ev) {
Message[] msgs = ev.getMessages();
System.out.println("Got " + msgs.length + " new messages");
// Process incoming mail.
} catch (Exception ex) {
ex.printStackTrace();
}
关于我应该如何限制在多服务器环境中只处理一次电子邮件的任何建议?