我有一個使用Azure隊列的基於PHP的應用程序。我的應用程序每隔20分鐘就有一個在我的Web服務器上運行的cron,並且它將多達2000條消息添加到Azure隊列存儲中。它曾經把這些消息放在一個隊列中,但現在我使用了兩個不同的隊列,每個隊列中都有消息。在將每條消息添加到隊列以避免節流之後,還有一個十分之一秒的休眠期。Azure隊列意外行爲
我具有約40級的VM上天青,從這個隊列,處理中讀取每個消息,然後更新數據庫,如果任何這些消息中的觸發特定事件。它在100條消息中發生一次。
這些虛擬機有一個具有900秒(參數或者set_time_limit(900))的最大運行時間一個PHP腳本,它們運行間隔爲15分鐘(900秒)cron作業。
的問題是,每半小時(有時是每小時)的虛擬機將無法讀取從隊列中任何幾分鐘。該消息將是空的。
這是代碼,我使用
$listMessagesResult = $queueRestProxy->listMessages($queue_name);
$messages = $listMessagesResult->getQueueMessages();
結果是簡單地一個空消息。我有以下代碼來跟蹤錯誤
if (empty($messages)) {
error_log(print_r($messages, TRUE));
}
它打印並清空數組。確切地說,這是在我的錯誤日誌中
Array\n(\n)\n
由於代碼大部分時間工作,我不明白是什麼問題。這是我如何知道,它經常發生http://i.imgur.com/RE9XtVS.png
Y軸是郵件的數量。 X軸是時間。消息計數是每分鐘進行的。
,增加了消息中的腳本的每個交替運行之後的平坦曲線示出了問題。如果代碼存在問題,行爲將不會如此不穩定。我不能指責什麼是錯的或哪裏會出現問題。代碼非常簡單,除了5-10分鐘的非活動之外,它大部分時間都在運行。
我會很感激這方面的幫助。謝謝。
我肯定會推薦的一件事是,您可以在您的隊列服務上啓用存儲分析,並查看存儲級別是否有任何奇怪的事情發生。啓用存儲分析後,您可以在'$ logs' blob容器中看到數據。 – 2014-10-12 14:42:42