Pop3 multiprocess, обрабатывать одно сообщение, один раз - PullRequest
0 голосов
/ 25 ноября 2010

Я использую .NET POP3, .net 3.5 против 2008.

У меня установлена ​​служба Windows на нескольких машинах.Каждый компьютер (на компьютере установлена ​​служба Windows) имеет доступ к одной и той же папке входящих сообщений POP3 (той же учетной записи) для сообщений процесса.

Использование многопоточности, одновременное выполнение нескольких сценариев на самом деле идеально, возможно ли это с помощьюкомпонент POP3 ??

Каждое сообщение должно обрабатываться один раз для любой машины (только одна машина должна обработать сообщение).

Ответы [ 3 ]

1 голос
/ 25 ноября 2010

Проблема в том, что POP3 не имеет концепции блокировки заданий / сообщений, поэтому несколько клиентов, одновременно заходящих в одну учетную запись, получат одинаковый набор сообщений.

Однако мне пришлось решить аналогичную проблему, и именно так я ее достиг. Сначала я использовал IMAP, а не POP3. Затем каждый клиент регистрирует папку в основном почтовом ящике. Затем у меня есть один главный узел, который управляет корневой папкой INBOX. Все остальные узлы запрашивают задание у главного узла, который выполняет простой перенос задания из корневого почтового ящика в папку запрашивающих узлов. Затем узел может извлечь задание непосредственно из своей личной папки, не беспокоясь о помехах от других узлов.

Если вам интересно, зачем нужен главный узел, то это потому, что IMAP не имеет атомарной операции перемещения, а скорее является копией, а затем удалите двухфазную операцию. Это означает, что для предотвращения любых проблем с параллелизмом у вас все еще может быть только один поток / процесс, обращающийся к папке INBOX.

1 голос
/ 25 ноября 2010

Я сделал это сам пару лет назад .

В итоге я сохранил UID сообщений в общей таблице SQL Server с ограничением UNIQUE.
Перед обработкой каждого сообщениядобавьте его в таблицу.
Если вы получили исключение, другой компьютер уже захватил его.

0 голосов
/ 25 ноября 2010

Конечно, это возможно, хотя и ужасно неэффективно. Поскольку опрашивается POP3, вы также вносите большую задержку. Почему вы хотите распределить свою рабочую нагрузку следующим образом? Что вы действительно пытаетесь решить?

...