У меня есть требование, в рамках которого я хочу прочитать входящие электронные письма из outlook, а затем выполнить некоторую обработку. Я использую JavaMail API вместе с протоколом IMAP для реализации этого. Я написал класс Java, который читает электронную почту на messagesAdded событие.
Он отлично работает с приведенным ниже кодом в среде с одним сервером, но когда я разверну его на производстве, где у нас есть 2 сервера, я получаю в итоге обработку каждого письма дважды, поскольку один и тот же код развернут на обоих серверах, оба пытаются прочитать почту после его получения в почтовом ящике.
Ниже приведен фрагмент кода, который я использую для подключения к почтовому ящику и чтения электронной почты:
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();
}
Какие-либо предложения о том, как ограничить обработку электронной почты только один раз в многосерверной среде?