我有一個包含約8,000個股票代碼的數組,我嘗試排隊;該隊列旨在接收股票代碼($ symbols [])數組,然後將每個代碼傳遞給工人/消費者(以您喜歡的任何術語爲準)。Laravel隊列 - 將數據傳遞到隊列
這裏就是我的QueueController目前的樣子:
Class QueueController extends \BaseController {
public function stocks()
{
$symbols = $this->select_symbols();
Queue::push('StockQueue', array('symbols' => $symbols));
}
...
}
從我QueueController,我調用一個方法來獲取股票符號的列表,並把它傳遞給StockQueue類爲$數據。
public function fire($job, $data)
{
$symbols = $data; // print_r shows all symbols...
// Get Quote Data for Symbol
$quote = $this->yql_get_quote($symbol);
// Get Key Stats for Symbol
$keystats = $this->yql_get_keystats($symbol);
// Merge Quote and Keystats into an Array
$array[] = $quote;
$array[] = $keystats;
// Save Data to DB
$this->yql_save_results($array, $symbol);
$job->delete();
}
這不是我想要達到的;我需要做的是將每個符號逐個傳遞給StockQueue類,並將其作爲一項任務來處理。
如果我要在while循環中包裝StockQueue-> stocks()方法,它會嘗試並將所有〜8,000(根據我的理解)立即傳遞給隊列。這會是有害的還是這是做到這一點的最佳方式?我一直無法找到很多基於PHP的在線RPC消息隊列示例,所以我對正確的流程中的最佳實踐感到好奇。
這樣說,我怎麼能爲這個隊列啓動多個工人?比如,我想要5名工人(取決於每個人需要多少資源;我會解釋這些)來處理這些任務,以便將處理時間減少約四分之五。我會怎麼做?
我只是五次啓動php artisan queue:listen
?
而且,爲了清楚起見,我使用beanstalkd和supervisord來執行消息隊列/監視。
我期待您的建議和見解。
太棒了。感謝您的洞察力。今晚我會試試這個。 – DroBuddy