2

azure-sdk-for-php を使用して Azure Queue Storage をロング ポーリングしているときに、要求が 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

スリープ機能を 30 秒に設定すると、すべてがうまくいきますが、必要のないリクエストを大量に作成しています。

私の労働者コード:

use WindowsAzure\Common\ServicesBuilder;
use WindowsAzure\Common\ServiceException;

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);
        }
    }

}
4

1 に答える 1

1

これは、過負荷またはタイムアウトの問題のようです。PHP ライブラリが Azure ソケットに書き込めません。おそらく、無限ループで Azure の負荷制限を超えていますwhile(true) { ... }

queueServicepear ソケットを無限に閉じたり開いたりするため、ループごとに作成しないでください。

行を移動してみてください:

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

while(true) {:

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

それでも解決しない場合は、ライブラリがソケット メカニズムを誤って使用している可能性があります - https://github.com/WindowsAzure/azure-sdk-for-phpazure-sdk-for-phpで新しい問題を作成するか、次のアプローチを使用してください:

于 2013-04-10T15:20:52.140 に答える