簡體   English   中英

如何向 ReactPHP/Amp/Swoole/etc 發送消息。 來自 PHP-FPM?

[英]How to send a message to ReactPHP/Amp/Swoole/etc. from PHP-FPM?

我正在考慮制作一個工作腳本來處理我的服務器上的異步任務,使用諸如 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 套接字服務器並實現自己的消息傳遞協議,或者有現成的解決方案來解決這個問題?


注意:如果您想知道,我不打算使用第三方消息隊列軟件,因為我希望將異步作業存儲為數據庫事務的一部分(整個事務成功,包括提交待處理作業,或者整個事務被丟棄)。 這是我保證不會丟失任何工作。 如果在最壞的情況下,無法將消息發送到正在運行的服務,則可能稍后仍會從數據庫中檢索丟失的作業。

如果您的工作人員作為服務“永久運行”,它應該提供一些 API 進行交互。 我在我的項目中將 AmPHP 用於異步服務,並且我的服務將 HTTP/Websockets 服務器(使用 Amp 庫)實現為 API 傳輸。

嘿 ReactPHP 核心團隊成員。 這完全取決於你的 ReactPHP/Amp/Swoole 進程做什么。 看看你的例子,我的建議是使用像 RabbitMQ 這樣的消息代理/隊列。 這樣,該過程可以在准備好時對其進行拍照,並在完成時確認它。 如果您的進程在此期間發生任何事情並且死亡,只要它沒有確認消息,它就會重試。 您也可以做一個小的 HTTP API 但這並不能保證在致命故障時重新處理消息。 最終這一切都取決於您的設計,所有 3 個項目都是構建您自己的架構和系統的工具集,這完全取決於您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM