我有一个使用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