Php worker在15分钟的空闲时间后出现异常

I have written a php worker to fetch data from RabbitMQ queue.The php worker is running successfully as a background job on some server which connects RabbitMQ server for consuming data using AMQP php extension.After there is no data enqued in the queue for 15 minutes, php scripts throws AMQPException. Exception is :

AMQPException Object (

[message:protected] => Library error: a socket error occurred
[string:Exception:private] => 
[code:protected] => 0
[file:protected] => /home/indiamart/public_html/dev-weberp-auto-dialer/merp/devworker.php
[line:protected] => 104
[trace:Exception:private] => Array
    (
        [0] => Array
            (
                [file] => /home/indiamart/public_html/dev-weberp-auto-dialer/merp/devworker.php
                [line] => 104
                [function] => consume
                [class] => AMQPQueue
                [type] => ->
                [args] => Array
                    (
                        [0] => Closure Object
                            (
                                [parameter] => Array
                                    (
                                        [$message] => <required>
                                        [$q] => <required>
                                    )

                            )

                    )

            )

    )

[previous:Exception:private] => 

)

Below is my worker code:

  <?php
    $callback_func     = function(AMQPEnvelope $message, AMQPQueue $q){
    $data              = json_decode($message->getBody(), true);
    $getDeliveryTag    = $message->getDeliveryTag();
    $ack               = $q->ack($getDeliveryTag);//used $getDeliveryTag


    $to                = isset($data["to"])?$data["to"]:"";
    $subjectMail       = isset($data["subject"])?$data["subject"]:"";
    $mail_body_content = isset($data["body"])?"<pre>".$data["body"]."</pre>":"";
    $mailfrom          = isset($data["mailfrom"])?$data["mailfrom"]:"";
    $cc                = isset($data["cc"])?$data["cc"]:"";
    $mailfromname      = isset($data["mailfromname"])?$data["mailfromname"]:"";
    $uniqueid          = isset($data["unique_id"])?$data["unique_id"]:"";


    if(!$ack){//if ack not recieved
        $ack_msg = "Unique id: $uniqueid Subject : $subjectMail";
        @mail("abc@example.com","History Queue Not acknowledged!",$ack_msg);
    }
    if($message->isRedelivery()){
        $red_msg = "Unique id: $uniqueid Subject : $subjectMail";
        @mail("abc@example.com","History Queue Redilivery!",$red_msg);
    }



    $m_headers_trail =  "From:$mailfromname<$mailfrom> 
".
                        "Cc:$cc
".
                        "MIME-Version: 1.0 
".
                        "Content-type: text/html; charset=UTF-8";

    $flag = @mail($to,$subjectMail,$mail_body_content,$m_headers_trail);
    $flag_message = $flag ? "success unique id: $uniqueid Subject :$subjectMail" : "mail failed";

    @mail("abc@example.com","History Mailer Result",$flag_message);

 };


  $host     = "127.0.0.1";
  $vhost    = "/";
  $port     = 5672;
  $login    = "admin";
  $password = "admin"; 


  CHANNEL :
    try{
        @mail("abc@example.com","History Queue worker Start!","Worker 
        started!");
        $cnn = new AMQPConnection(array("host" => $host,"vhost" => $vhost,"port" 
        => $port,"login" => $login,"password" => $password));
        $cnn->connect();
        if(!$cnn){
            @mail("abc@example.com","History Queue Connection 
            Error!","Connection not established!");
        }
        $ch    = new AMQPChannel($cnn);
        $queue = new AMQPQueue($ch);

        $queue->setName('STS_UPDATE_MAIL');
        $queue->setFlags(AMQP_NOPARAM);

        $queue->consume($callback_func);


        $ch->close();
        $cnn->close();
    }catch(Exception $e){

        if ($ch->isConnected()) {
            $ch->close();
            @mail("abc@example.com","History Queue Closing 
            Connection!","Closed!"); 
        } 
        if ($cnn->isConnected()) {
            $cnn->close();
            @mail("abc@example.com","History Queue Closing 
            Connection!","Closed!"); 
        } 
        goto CHANNEL;
    }


?>
dongye9191
dongye9191 我明白了,这还不清楚。不幸的是,我不熟悉那个扩展。如果您可以获得RabbitMQ日志,它将明确显示正在发生的事情。
一年多之前 回复
doudong3570
doudong3570 是的Luke,感谢您访问和分享内容,但我使用的是amqpphpextention,而不是这个库。我正在共享我使用过的扩展名链接docs.php.net/manual/da/book.amqp.php
一年多之前 回复
dongxun6690
dongxun6690 请仔细阅读我的回复,我在其中说明:“我建议你在这里查看消费者示例,因为我不相信你已经正确编写了消费者:github.com/php-amqplib/php-amqplib/blob/master/演示/...”。您是否按照我的要求查看了您的代码?
一年多之前 回复
dongmeng1402
dongmeng1402 服务器是远程的。我无权访问日志。你能指出导致错误的方向吗?
一年多之前 回复
dpcnm2132
dpcnm2132 RabbitMQ同时记录了什么?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐