【问题标题】:Pop3 multiprocess, process one message, once timepop3多进程,处理一条消息,一次
【发布时间】:2010-11-25 20:21:49
【问题描述】:

我使用的是 .NET POP3、.net 3.5,与 2008 相比。

我在几台机器上安装了一个 Windows 服务。每台机器(机器上安装windows服务)访问同一个收件箱POP3(同一个账号)处理消息。

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

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

【问题讨论】:

    标签: c# multithreading process pop3 distributed-computing


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      I did this myself a couple of years ago.

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

      【讨论】:

        【解决方案3】:

        当然有可能,尽管效率极低。因为 POP3 是轮询的,所以也会引入很多延迟。为什么要像这样分配工作负载?你真正想解决什么问题?

        【讨论】:

        • 这怎么可能?任何样品?我的公司想要这样做。那么哪个会是更好的选择??
        猜你喜欢
        • 2020-08-19
        • 2014-10-23
        • 1970-01-01
        • 2022-11-10
        • 2016-04-24
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多