如何定时收取很多邮件的内容? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
i4color
V2EX    Java

如何定时收取很多邮件的内容?

  •  
  •   i4color 2024-08-08 09:07:59 +08:00 1994 次点击
    这是一个创建于 460 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在碰到个难题,大家帮参谋一下

    系统里有很多邮箱,要 10 来秒就用 pop3 检查一下有没有新邮件。同时要把邮件里的内容更新到数据库。
    这些邮箱可能属于同一个人,也可能属于不同人。

    我现在是单线程,循环,速度很慢。有没有优化的方法?

    1.我想到就是多线程,每一个线程对应一个邮箱。
    问题就是如果属于同一个人的邮箱,如何做到数据的更新不冲突?

    2.我设计一个邮件抢单中心,开很多的邮件收取客户端。大家都到我这里抢任务。这样设计是不是多此一举?
    9 条回复    2024-08-08 17:51:30 +08:00
    vacuitym
        1
    vacuitym  
       2024-08-08 09:09:02 +08:00
    可以试试 mq ?
    i4color
        2
    i4color  
    OP
       2024-08-08 09:14:39 +08:00
    @vacuitym mq 也只是控制队列,实际上还是需要靠很多线程或客户端收取的。
    loongkimc
        3
    loongkimc  
       2024-08-08 09:22:47 +08:00
    1.每个邮箱起一个任务负责遍历捞邮箱的未读邮件;
    2.把邮箱配置、未读邮件 ID 一条条丢给队列,直接标记为已读;
    3.起 N 个消费端从队列领处理任务,失败了丢回队列排队重试,超过重试次数放入异常库。

    这样会不会好一些
    i4color
        4
    i4color  
    OP
       2024-08-08 09:36:24 +08:00
    @loongkimc 嗯,你帮我想到了一些没想到的思路。
    yty2012g
        5
    yty2012g  
       2024-08-08 10:23:20 +08:00
    1 、在楼上的基础上,可以利用类似 Kafka 的 partition 这种机制,以用户邮箱为 key ,确保同一个用户一定在一个 partition ,然后消费者一个 partition 对应一个 thread ,这就确保一个人的数据只会被一个线程处理
    2 、或者利用 Redis 的 SortedSet 数据结构,接收线程接收邮件写入 redis ,一个用户一个 key ,score 用接收的时间之类的。然后定时任务扫描 redis ,使用 lua 脚本结合 zrem+zrange ,一次获取一个人的一部分邮件,然后写 DB 。
    3 、总体来说,就是要写入的时候一个用户只被一个 thread 操作,基于这个思路还能有其他的策略
    julyclyde
        6
    julyclyde  
       2024-08-08 11:01:23 +08:00
    建议你说一下原始需求,而不是自己先选了做法,遇到这个做法的不便再来求助

    先说说,为什么要用程序去收邮件?
    yinmin
        7
    yinmin  
       2024-08-08 11:24:03 +08:00 via iPhone
    你可以考虑改用 imap 推送的方式,有新邮件 ima 服务器会自动推送给你
    lavvrence
        8
    lavvrence  
       2024-08-08 12:04:28 +08:00
    IMAP IDLE, RFC 2177.
    tubinorg
        9
    tubinorg  
       2024-08-08 17:51:30 +08:00   1
    这个时候,actor 模型就特别好用
    邮递员收到邮件,看到这个邮件是张三的,直接把邮件丢给张三家的邮箱里面
    你可以有 N 个邮递员送邮件,速度飞起

    Erlang 大法好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4378 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 01:01 PVG 09:01 LAX 17:01 JFK 20:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86