php - 电子邮件消息队列 - X worker 和停止重叠

标签 php mysql email queue

当我的网站周围发生事件时,我有一大堆电子邮件被加载到 MySQL 表中。随时可能有 1k-2k 等待发送。

我一直致力于对电子邮件进行批处理,并通过一名工作人员将它们发送出去。现在我希望在负载增加时向系统添加 X 个工作人员。

我的问题是关于不允许员工获取同一封电子邮件。我听说过以下选项。

  1. 使用 SELECT FOR UPDATE 锁定行
  2. 使用时间戳让工作人员知道它已被拍摄以及拍摄时间
  3. 有一位家长跟踪 child 并委派工作

我看到了其中每一个的值(value),但也看到了对数据库的大量读/写。那你会怎么做?

通过 PHP 和 MySQL 执行此操作

最佳答案

另一个快速而肮脏的选择,假设你有一个随机或结构化的主键,让 N 个工作人员中的每一个只接收 key%N==i 的邮件i 工作人员 ID。

您当然也可以采用其他足够随机的哈希值。不需要锁,不需要额外的协调,只是一个小问题,当一个 worker 死了而你没有注意到...

关于php - 电子邮件消息队列 - X worker 和停止重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5363586/

相关文章:

php - 更新字段 1

javascript - HTML - 如何制作 "Read More"按钮

php - 将 App Engine 子域重定向到文件夹

php - 如何在laravel 5.4中仅获取created_at日期而不是时间

mysql - 创建与 SQL 中的条目排名位置相对应的列

php - 如何在 Laravel 中使用 sendmail?

sql - SQL Server 2005发送邮件

mysql - LIMIT 显示重复结果

php - 在 laravel 中查找具有 hasmany 关系的结果

Java高级邮件库