3
我正在爲Laravel開發移動應用程序的API。從Laravel工作返回數據
方法將請求其它的API,合併和過濾數據,改變它的結構等
其中一個要求的應用程序是響應不超過30秒,或者沒有反應。所以,我必須儘可能多地重複請求。我想知道,有Laravel隊列,目前在我的作業類類似的東西:
private $apiActionName;
public function __construct($apiActionName)
{
$this->apiActionName = $apiActionName;
}
public function handle(SomeService $someService)
{
return $someService->{$this->apiActionName}();
}
,因此這個動作代碼控制器:
public function someAction()
{
$data = $this->dispatch(new MyJob($apiActionName));
return response()->json($data);
}
是的,我知道這是好主意從工作中回報價值,但期望這是可能的。但是$ this-> dispatch()只返回排隊的作業ID,而不是處理方法的結果。
TL; DR:如何從排隊的Job中返回數據,而不保存到任何地方,即使它有多個隊列嘗試?如果喬布斯不適合這個,也許有人知道其他方法。任何建議將被認真考慮。
在此先感謝!
謝謝你的迴應!我需要以異步模式運行它,因爲否則在失敗的情況下Job不會重複。我試圖按照你的建議與getter,然後在循環中檢查getResponse(),但它不起作用(重試有其他ID?)。順便說一句,有可能從非排隊作業中返回值,而不使用getter:$ data = $ this-> dispatchNow($ job); – Bushikot
在異步模式下,您將無法按定義返回值 - 因爲它將在一段時間後以異步模式運行。因此,您的工作必須將結果保存在某處,並且客戶端/控制器必須通過輪詢或實時流式傳輸(websockets,pubsub)再次請求。無論哪種方式,您都不能僅從異步作業返回結果 –