轮询Azure队列返回管道损坏



当长轮询Azure队列存储与 Azure -sdk-for-php时,如果我的请求间隔超过30秒,库死亡与此错误:

PHP Notice:  fwrite(): send of 277 bytes failed with errno=32 Broken pipe in ..../vendor/pear-pear.php.net/HTTP_Request2/HTTP/Request2/SocketWrapper.php on line 188

如果我将sleep函数设置为30秒,一切都很好,但是我发出了很多我不需要的请求。

My workers code:

use WindowsAzureCommonServicesBuilder;
use WindowsAzureCommonServiceException;
Class Worker_Task {
    public $queueRestProxy;
    public $servicesBuilder;
    public $connectionString;
    public function __construct() {
        $this->connectionString = Config::get('azure.connection_string');
        $this->servicesBuilder = ServicesBuilder::getInstance();
        $this->queueRestProxy = $this->servicesBuilder->createQueueService($this->connectionString);
    }
    public function emails() {
        $this->write('Processing mails...');
        while(true) {
            $this->queueRestProxy = $this->servicesBuilder->createQueueService($this->connectionString);
            // Get message.
            $listMessagesResult = $this->queueRestProxy->listMessages("emails");
            $messages = $listMessagesResult->getQueueMessages();
            foreach($messages as $message) {
                // Process Message
                $content = json_decode($message->getMessageText());
                // Dispatch Email
                // Delete Job
                $this->deleteJob('emails', $message->getMessageId(), $message->getPopReceipt());
            }
            sleep(30);
        }
    }
}

这看起来像是过载或超时问题。PHP库无法写入Azure套接字。可能您使用无限循环while(true) { ... }超出了Azure负载限制。

不要在每个循环中创建queueService,因为您会无限地关闭和打开梨套接字。

尝试移动线:

$this->queueRestProxy = $this->servicesBuilder->createQueueService($this->connectionString);

before while(true) {:

$this->write('Processing mails...');
$this->queueRestProxy = $this->servicesBuilder->createQueueService($this->connectionString);    
while(true) {
        // Get message.

如果这没有帮助,那么azure-sdk-for-php库可能错误地使用套接字机制-在https://github.com/WindowsAzure/azure-sdk-for-php创建新问题或使用这种方法:AzurePHP -轮询Azure队列

最新更新