2017-08-23 18 views
1

私はphp-amqplibを使用して、PHPとRabbitMQとのクライアントとサーバーの通信に取り組んでいます。RabbitMQからphp-amqlibでメッセージを読むことができません

私は正常に動作するように見えるプロデューサスクリプトを持っていますが、コンシューマは何も受信しません。

キュー内のエントリをsudo rabbitmqctl list_queuesでチェックし、プロデューサを実行するたびにカウンタがインクリメントします。

私の消費者はPHPエラーなしで起動し、メッセージを待っているようです。 何もしないと、開始時に空の受信メッセージを1回だけコールバックスクリプトを実行します。ここで

php consumer.php 
string(47) " [*] Waiting for messages. To exit press CTRL+C" 
string(1) " 
" 
string(10) "Received: " 

は私のコードです:

producer.php

public function sendDataToRabbitMQ() 
{ 
    $id = $_POST['id']; 
    $ipAddress = $_POST['ip']; 
    $date = date("Y-m-d h:i:s"); 
    $status = false; 

    $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); //host: RABBITMQ_HOST 
    $channel = $connection->channel(); 

    $channel->queue_declare('first_queue', false, true, false, false); 

    if(is_array($argv)) { 
     $data = implode(' ', array_slice($argv, 1)); 
    } 

    if (empty($data)) { 
     $data = "$ipAddress,$id"; 
    } 

    $msg = new AMQPMessage($data, array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT)); 

    $channel->basic_publish($msg, '', 'first_queue'); 

    echo " [x] Sent data:", "\n", $data, "\n"; 

    $channel->close(); 
    $connection->close(); 

    return $result; 
} 

(テスト目的のためにlocalhostに変更されたホスト名定数)

consumer.php

<?php 

require_once '../vendor/autoload.php'; 

use PhpAmqpLib\Connection\AMQPStreamConnection; 

class Consumer 
{ 
    private $token; 

    private function getQueue() 
    { 
     $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); 
     $channel = $connection->channel(); 

     $channel->queue_declare('ban_queue', false, true, false, false); 

     var_dump(' [*] Waiting for messages. To exit press CTRL+C', "\n"); 

     $callback = function($msg) { 

      $message = explode(',', $msg->body); 

      var_dump('Received: '.$message[0]); 

      $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); 
     }; 

     $channel->basic_qos(null, 1, null); 
     $channel->basic_consume('first_queue', '', false, false, false, false, $callback); 
     while (count($channel->callbacks)) { 
      $channel->wait(); 
     } 
     $channel->close(); 
     $connection->close(); 
    } 

    public function processResult() 
    { 
     $this->getQueue(); 
    } 

} 

$consumer = new Consumer(); 
$consumer->processResult(); 

なぜ機能しないのですか?私はrabbitmq/php-amqplibチュートリアルとドキュメントがかなり役に立たず、今半日以上にわたってこの問題に完全にぶつかったことを発見しました。どんな助けもありがとうございます。

UPDATE 1

私はまた、このサイトからこのQAをチェックし、私のコードは、それにコヒーレントです。

答えて

0

は、研究とテストのいくつかの時間後、私は上記の問題の解決策を考え出した:

私は

$channel->basic_consume('first_queue', '', false, true, false, false, $callback); 

$channel->basic_consume('first_queue', '', false, false, false, false, $callback); 

を変更し、それがトリックをしました。

関連する問題