
1 vacuitym 2024-08-08 09:09:02 +08:00 可以试试 mq ? |
3 loongkimc 2024-08-08 09:22:47 +08:00 1.每个邮箱起一个任务负责遍历捞邮箱的未读邮件; 2.把邮箱配置、未读邮件 ID 一条条丢给队列,直接标记为已读; 3.起 N 个消费端从队列领处理任务,失败了丢回队列排队重试,超过重试次数放入异常库。 这样会不会好一些 |
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 操作,基于这个思路还能有其他的策略 |
6 julyclyde 2024-08-08 11:01:23 +08:00 建议你说一下原始需求,而不是自己先选了做法,遇到这个做法的不便再来求助 先说说,为什么要用程序去收邮件? |
7 yinmin 2024-08-08 11:24:03 +08:00 via iPhone 你可以考虑改用 imap 推送的方式,有新邮件 ima 服务器会自动推送给你 |
8 lavvrence 2024-08-08 12:04:28 +08:00 IMAP IDLE, RFC 2177. |
9 tubinorg 2024-08-08 17:51:30 +08:00 这个时候,actor 模型就特别好用 邮递员收到邮件,看到这个邮件是张三的,直接把邮件丢给张三家的邮箱里面 你可以有 N 个邮递员送邮件,速度飞起 Erlang 大法好 |