Pop3多进程,一次处理一条消息

时间:2010-11-25 20:21:49

标签: c# multithreading process pop3 distributed-computing

我使用的是.NET POP3,.net 3.5,vs。2008。

我在几台机器上安装了Windows服务。每台机器(安装在机器上的Windows服务)都可以访问相同的收件箱POP3(同一帐户)以获取流程消息。

使用多线程,同时运行的多个脚本实际上是理想的,是否可以使用组件POP3 ??

每个消息必须处理一次,对于任何计算机(只有一台计算机必须处理该消息)。

3 个答案:

答案 0 :(得分:1)

问题是POP3没有锁定作业/消息的概念,因此同时登录同一帐户的多个客户端都将获得相同的消息集。

然而,我必须解决类似的问题,这就是我实现它的方式。首先我使用IMAP而不是POP3。然后,每个客户端在主收件箱下注册一个文件夹。然后我有一个管理INBOX根文件夹的主节点。所有其他节点从主节点请求作业,该作业执行作业从根收件箱到请求节点文件夹的简单移动。然后,节点可以直接从其私有文件夹中提取作业,而无需担心来自其他节点的干扰。

如果您想知道为什么需要主节点,那是因为IMAP没有原子移动操作,而是复制然后删除两阶段操作。这意味着为了防止出现任何类型的并发问题,您仍然只能让一个线程/进程访问INBOX文件夹。

答案 1 :(得分:1)

I did this myself a couple of years ago

我最终存储了消息'具有UNIQUE约束的共享SQL Server表中的UID 在处理每条消息之前,请将其添加到表中 如果你得到一个例外,一台不同的机器已经抓住了它。

答案 2 :(得分:0)

当然有可能,尽管非常低效。因为POP3被轮询,所以你也会引入很多延迟。你为什么要像这样分发你的工作量?你真的想解决什么?