我正在考虑制作一个工作脚本来处理我的服务器上的异步任务,使用诸如 ReactPHP、Amp 或 Swoole 之类的框架将作为服务永久运行(我还没有在这些框架之间做出选择,所以解决方案涉及任何这些都是有帮助的)。
我的 Web 端点仍将照常由 Apache + PHP-FPM 管理,我希望它们能够将消息发送到永久运行的脚本,以使其知道异步作业已准备好尽快处理。
来自 Web 端点的伪代码:
$pdo->exec('INSERT INTO Jobs VALUES (...)');
$jobId = $pdo->lastInsertId();
notify_new_job_to_worker($jobId); // how?
您通常如何处理从 PHP-FPM 到这些框架中永久运行的脚本的通信?您是否设置了 TCP / Unix Socket 服务器并实现了自己的消息传递协议,或者是否有现成的解决方案来解决这个问题?
注意:如果您想知道,我不打算使用第三方消息队列软件,因为我希望将异步作业存储为数据库事务的一部分(整个事务成功,包括提交待处理作业,或者整个事务被丢弃)。这是我保证不会丢失任何工作。如果在最坏的情况下,无法将消息发送到正在运行的服务,则可能稍后仍会从数据库中检索丢失的作业。