public function Run()
 {
     // Declare a new exchange
     $ex = new AMQPExchange($this->cnn);
     $ex->declare('game', AMQP_EX_TYPE_TOPIC);
     // Create a new queue
     $q1 = new AMQPQueue($this->cnn);
     $q1->declare('queue1');
     $q1->purge('queue1');
     $q2 = new AMQPQueue($this->cnn);
     $q2->declare('queue2');
     $q1->purge('queue2');
     $q3 = new AMQPQueue($this->cnn);
     $q3->declare('queue3');
     $q3->purge('queue3');
     $options = array('min' => 0, 'max' => 10, 'ack' => true);
     // Bind it on the exchange to routing.key
     $ex->bind('queue1', 'game1.#');
     $ex->bind('queue2', 'game1.#');
     $ex->bind('queue3', 'game1.#');
     $ex->bind('queue3', 'queue3.#');
     $msgbody1 = 'hello';
     // Publish a message to the exchange with a routing key
     $result = $ex->publish($msgbody1, 'game1.msg');
     $this->AssertEquals($result, TRUE, 'publish message failed');
     $msgbody2 = 'world';
     // Publish a message to the exchange with a routing key
     $result = $ex->publish($msgbody2, 'game1.msg');
     $this->AssertEquals($result, TRUE, 'publish message failed');
     $msgbody3 = 'hello player3';
     // Publish a message to the exchange with a routing key
     $result = $ex->publish($msgbody3, 'queue3.command');
     $this->AssertEquals($result, TRUE, 'publish message failed');
     // Read from the queue
     $msg = $q1->consume($options);
     $this->AddMessage(var_export($msg, true));
     $this->AssertEquals(count($msg), 2);
     $this->AssertEquals($msg[0]['message_body'], $msgbody1, 'message not equal');
     $this->AssertEquals($msg[1]['message_body'], $msgbody2, 'message not equal');
     // Read from the queue
     $msg = $q2->consume($options);
     $this->AssertEquals(count($msg), 2);
     $this->AssertEquals($msg[0]['message_body'], $msgbody1, 'message not equal');
     $this->AssertEquals($msg[1]['message_body'], $msgbody2, 'message not equal');
     // Read from the queue
     $msg = $q3->consume($options);
     $this->AddMessage(var_export($msg, true));
     $this->AssertEquals(count($msg), 3);
     $this->AssertEquals($msg[0]['message_body'], $msgbody1, 'message not equal');
     $this->AssertEquals($msg[1]['message_body'], $msgbody2, 'message not equal');
     $this->AssertEquals($msg[2]['message_body'], $msgbody3, 'message not equal');
     $msg = $q3->consume($options);
     $this->AssertEquals(count($msg), 0);
 }
 public function Run()
 {
     // Declare a new exchange
     $ex = new AMQPExchange($this->cnn);
     $ex->declare('game', AMQP_EX_TYPE_FANOUT);
     // Create a new queue
     $q1 = new AMQPQueue($this->cnn);
     $q1->declare('queue1');
     $q2 = new AMQPQueue($this->cnn);
     $q2->declare('queue2');
     // Bind it on the exchange to routing.key
     //$ex->bind('queue1', 'broadcast=true,target=queue1,x-match=any');
     $ex->bind('queue1', '');
     $ex->bind('queue2', '');
     $msgBody = 'hello';
     // Publish a message to the exchange with a routing key
     $ex->publish($msgBody, 'foo');
     // Read from the queue
     $msg = $q1->consume();
     $this->AssertEquals(count($msg), 1);
     $this->AssertEquals($msg[0]['message_body'], $msgBody, 'message not equal');
     // Read from the queue
     $msg = $q2->consume();
     $this->AssertEquals(count($msg), 1);
     $this->AssertEquals($msg[0]['message_body'], $msgBody, 'message not equal');
     $this->AddMessage(var_export($msg[0], true));
 }
Exemple #3
0
 /**
  * @inheritdoc
  */
 public function consume(callable $callback, $flags = null, $consumerTag = null)
 {
     $wrapper = function (\AMQPEnvelope $envelope) use($callback) {
         return $callback(new Envelope($envelope));
     };
     $this->delegate->consume($wrapper, self::convertToDelegateFlags($flags), $consumerTag);
 }
 /**
  * {@inheritDoc}
  */
 public function receive(array $eventNames, \Closure $callback)
 {
     $exchangeName = $this->exchange->getName();
     foreach ($eventNames as $eventName) {
         $this->queue->bind($exchangeName, $eventName);
     }
     $this->queue->consume(function (\AMQPEnvelope $envelope, \AMQPQueue $queue) use($callback) {
         $message = $envelope->getBody();
         $messageTag = $envelope->getDeliveryTag();
         $status = call_user_func($callback, $message);
         if ($status) {
             $queue->ack($messageTag);
         } else {
             $queue->nack($messageTag);
         }
     });
 }
 public function get($queueName, $timeout = null)
 {
     if (null === $this->queue) {
         $queue = new \AMQPQueue($this->channel);
         $queue->setName($queueName);
         $queue->declare();
     }
     return unserialize($queue->consume());
 }
Exemple #6
0
 /**
  * @param callable|null $callback
  * @param int           $flags
  * @param string        $consumerTag
  */
 public function consume(callable $callback = null, $flags = Client::NOPARAM, $consumerTag = null)
 {
     try {
         $this->rawQueue->consume(function (\AMQPEnvelope $envelope) use($callback) {
             return $callback(Envelope::createFromRaw($envelope, $this->decodeStrategy), $this);
         }, $flags, $consumerTag);
     } catch (\Exception $e) {
         ClientHelper::throwRightException($e);
     }
 }
Exemple #7
0
 public function subscribe($topic, $queueName, $process_callback)
 {
     $channel = new AMQPChannel($this->amqpConnection);
     $channel->setPrefetchCount(0);
     $queue = new AMQPQueue($channel);
     $queue->setName($queueName);
     $queue->setFlags(AMQP_DURABLE);
     $queue->declareQueue();
     $queue->bind('topic', $topic);
     $queue->consume($process_callback);
     if (!$this->amqpConnection->disconnect()) {
         throw new Exception("Could not disconnect !");
     }
 }
 public function Run()
 {
     // Declare a new exchange
     $ex = new AMQPExchange($this->cnn);
     $ex->declare('game', AMQP_EX_TYPE_HEADER);
     // Create a new queue
     $q1 = new AMQPQueue($this->cnn);
     $q1->declare('queue1');
     $q1->purge('queue1');
     $q2 = new AMQPQueue($this->cnn);
     $q2->declare('queue2');
     $q1->purge('queue2');
     $q3 = new AMQPQueue($this->cnn);
     $q3->declare('queue3');
     $q3->purge('queue3');
     $options = array('min' => 0, 'max' => 10, 'ack' => true);
     // Bind it on the exchange to routing.key
     $ex->bind('queue1', 'broadcast=1,target=1,x-match=any');
     $ex->bind('queue2', 'broadcast=1,target=2,x-match=any');
     $ex->bind('queue3', 'broadcast=1,target=3,x-match=any');
     $msgbody1 = 'hello';
     // Publish a message to the exchange with a routing key
     $result = $ex->publish($msgbody1, NULL, AMQP_IMMEDIATE, array('headers' => array('broadcast' => 1)));
     $this->AssertEquals($result, TRUE, 'publish message failed');
     $msgbody2 = 'world';
     // Publish a message to the exchange with a routing key
     $result = $ex->publish($msgbody2, NULL, AMQP_IMMEDIATE, array('headers' => array('broadcast' => 1)));
     $this->AssertEquals($result, TRUE, 'publish message failed');
     $msgbody3 = 'queue3';
     // Publish a message to the exchange with a routing key
     $result = $ex->publish($msgbody1, NULL, AMQP_IMMEDIATE, array('headers' => array('target' => 3)));
     $this->AssertEquals($result, TRUE, 'publish message failed');
     // Read from the queue
     $msg = $q1->consume($options);
     $this->AddMessage(var_export($msg, true));
     $this->AssertEquals(count($msg), 2);
     //$this->AssertEquals($msg[0]['message_body'], $msgbody1, 'message not equal');
     //$this->AssertEquals($msg[1]['message_body'], $msgbody2, 'message not equal');
     // Read from the queue
     $msg = $q2->consume($options);
     $this->AssertEquals(count($msg), 2);
     //$this->AssertEquals($msg[0]['message_body'], $msgbody1, 'message not equal');
     //$this->AssertEquals($msg[1]['message_body'], $msgbody2, 'message not equal');
     // Read from the queue
     $msg = $q3->consume($options);
     $this->AssertEquals(count($msg), 3);
     //$this->AssertEquals($msg[0]['message_body'], $msgbody1, 'message not equal');
     //$this->AssertEquals($msg[1]['message_body'], $msgbody2, 'message not equal');
     //$this->AssertEquals($msg[2]['message_body'], $msgbody3, 'message not equal');
 }
Exemple #9
0
 /**
  * Get message from queue
  *
  * @return \Apple\ApnPush\Notification\MessageInterface|null
  *
  * @throws \RuntimeException
  */
 public function getMessage()
 {
     if (null === $this->queue) {
         throw new \RuntimeException('Can\'n get message. Not found queue.');
     }
     $message = null;
     $this->queue->consume(function (\AMQPEnvelope $amqpMessage, \AMQPQueue $queue) use(&$message) {
         $message = unserialize($amqpMessage->getBody());
         $queue->ack($amqpMessage->getDeliveryTag());
         // End consume process
         return false;
     }, AMQP_NOPARAM);
     return $message;
 }
 public function consume($queueName, $callBackFunction)
 {
     try {
         $queue = new AMQPQueue($this->channel);
         $queue->setName($queueName);
         $queue->setFlags(AMQP_DURABLE);
         $queue->declareQueue();
         echo ' [*] Waiting for messages on ' . $queueName . '. To exit press CTRL+C ', PHP_EOL;
         $queue->consume($callBackFunction);
     } catch (AMQPQueueException $ex) {
         print_r($ex);
     } catch (Exception $ex) {
         print_r($ex);
     }
 }
 /**
  * @param  string $queue
  * @param  string $consumer_tag
  * @param  bool $no_local
  * @param  bool $no_ack
  * @param  bool $exclusive
  * @param  bool $nowait
  * @param  callable $callback
  * @param  string $ticket
  * @param  array $arguments
  * @return mixed
  */
 public function basic_consume($queue = '', $consumer_tag = '', $no_local = false, $no_ack = false, $exclusive = false, $nowait = false, callable $callback = null, $ticket = null, $arguments = array())
 {
     $q = new \AMQPQueue($this->channel);
     $q->setName($queue);
     $q->declareQueue();
     $flags = AMQP_NOPARAM;
     $flags += $no_local ? AMQP_NOLOCAL : 0;
     $flags += $no_ack ? AMQP_AUTOACK : 0;
     $flags += $exclusive ? AMQP_EXCLUSIVE : 0;
     $flags += $nowait ? AMQP_NOWAIT : 0;
     $q->consume(function ($message, \AMQPQueue $q) use($callback, $flags, $consumer_tag) {
         $deliveryInfo = array('channel' => $q, 'delivery_tag' => '');
         return $callback(new AMQPMessage($message, array(), $deliveryInfo));
     }, $flags, $consumer_tag);
 }
 public function Run()
 {
     // Create a new queue
     $q1 = new AMQPQueue($this->cnn);
     $q1->declare('queue1');
     $q1->purge('queue1');
     $options = array('min' => 0, 'max' => 10, 'ack' => true);
     // Bind it on the exchange to routing.key
     $q1->bind(\Constant\AMQPChannelConstant::AMF, \Constant\AMQPCommand::BingoBroadcast);
     // Read from the queue
     while (TRUE) {
         $msg = $q1->consume($options);
         var_dump($msg);
     }
 }
Exemple #13
0
 /**
  * Синхронный вызов
  * @param $service
  * @param $message
  * @return \AMQPEnvelope
  * @throws \Exception
  */
 public function syncCall($service, $message)
 {
     if (is_array($message) || is_object($message)) {
         $message = Json::encode($message);
     }
     // id этого запроса
     $correlationId = self::$syncCallCorrelationId++;
     $chanel = $this->amqp->newChannel();
     // Принимать неограниченное количество сообщений
     $chanel->qos(0, 0);
     //<editor-fold desc="Создаем временную очередь ответов">
     $queue = new \AMQPQueue($chanel);
     $queue->setName($this->amqp->getSyncCallTransactionId());
     // Очередь удалиться когда опустеет
     $queue->setFlags(AMQP_AUTODELETE | AMQP_EXCLUSIVE);
     $queue->declareQueue();
     //</editor-fold>
     //<editor-fold desc="Отправляем запрос на обработку">
     // Точка доступа
     $exchange = new \AMQPExchange($chanel);
     $attributes = array('reply_to' => $this->amqp->getSyncCallTransactionId(), 'correlation_id' => $correlationId);
     if (!$exchange->publish($message, $service, AMQP_NOPARAM, $attributes)) {
         throw new \Exception('Exchange publish error');
     }
     //</editor-fold>
     //<editor-fold desc="Ожидаем ответ">
     /**
      * @param \AMQPEnvelope $envelope
      * @param \AMQPQueue $queue
      * @return bool
      */
     $processMessage = function ($envelope, $queue) use($correlationId, &$r) {
         if ($envelope->getCorrelationId() == $correlationId) {
             $r = $envelope;
             return false;
         }
         return true;
     };
     $queue->consume($processMessage);
     //</editor-fold>
     return $r;
 }
Exemple #14
0
 public static function main()
 {
     self::$pool = new Pool(MAX_CONCURRENCY_JOB, \CALLWorker::class, []);
     $conn_args = (require 'mq.config.php');
     $e_name = 'e_linvo';
     //交换机名
     $q_name = 'q_linvo';
     //队列名
     $k_route = 'key_1';
     //路由key
     //创建连接和channel
     $conn = new AMQPConnection($conn_args);
     if (!$conn->connect()) {
         write_log('mq.hx9999.com 无法连接上');
         return;
     }
     $channel = new AMQPChannel($conn);
     //创建交换机
     $ex = new AMQPExchange($channel);
     $ex->setName($e_name);
     $ex->setType(AMQP_EX_TYPE_DIRECT);
     //direct类型
     $ex->setFlags(AMQP_DURABLE);
     //持久化
     //创建队列
     $q = new AMQPQueue($channel);
     $q->setName($q_name);
     $q->setFlags(AMQP_DURABLE);
     //持久化
     while (True) {
         $q->consume(function ($envelope, $queue) {
             $msg = $envelope->getBody();
             $queue->ack($envelope->getDeliveryTag());
             //手动发送ACK应答
             self::$pool->submit(new Sendsms($msg));
         });
     }
     self::$pool->shutdown();
     $conn->disconnect();
     //睡眠
     sleep(5);
 }
Exemple #15
0
 /**
  * @inheritdoc
  */
 public function consume(callable $callback = null, int $flags = Constants::AMQP_NOPARAM, string $consumerTag = '')
 {
     if (null !== $callback) {
         $innerCallback = function (\AMQPEnvelope $envelope, \AMQPQueue $queue) use($callback) {
             $envelope = new Envelope($envelope);
             return $callback($envelope, $this);
         };
     } else {
         $innerCallback = null;
     }
     try {
         $this->queue->consume($innerCallback, $flags, $consumerTag);
     } catch (\AMQPConnectionException $e) {
         throw QueueException::fromAmqpExtension($e);
     } catch (\AMQPChannelException $e) {
         throw QueueException::fromAmqpExtension($e);
     } catch (\AMQPQueueException $e) {
         throw QueueException::fromAmqpExtension($e);
     }
 }
<?php

echo "<pre>";
$conn_args = array("host" => 'localhost', 'port' => 5672, 'login' => 'guest', "password" => 'guest', 'vhost' => '/');
$conn = new AMQPConnection($conn_args);
if ($conn->connect()) {
    echo "Success\r\n";
} else {
    echo "Fail\r\n";
}
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
//先设定名字队列,如果没有将自动创建队列
$q->setName('t111');
//声明队列
$q->declareQueue();
//$q->declare(); 等同效果
//取出数据之(闭塞方式) 一直运行
$q->consume('callback1');
//通过回调函数取出 函数传2个参数,一个Envelope类型,一个队列
//(非闭塞方式) 取尽则停
//$message = $q->get(AMQP_AUTOACK); //AMQP_AUTOACK 貌似写不写都一样
//print_r($message->getBody());
function callback1($envelope, $queue)
{
    echo "Message :" . $envelope->getBody() . "\n";
}
$connection->setHost('127.0.0.1');
$connection->setLogin('guest');
$connection->setPassword('guest');
$connection->connect();
//Create and declare channel
$channel = new AMQPChannel($connection);
//AMQPC Exchange is the publishing mechanism
$exchange = new AMQPExchange($channel);
$callback_func = function (AMQPEnvelope $message, AMQPQueue $q) use(&$max_consume) {
    echo PHP_EOL, "------------", PHP_EOL;
    echo " [x] Received ", $message->getBody(), PHP_EOL;
    echo PHP_EOL, "------------", PHP_EOL;
    $q->nack($message->getDeliveryTag());
    sleep(1);
};
try {
    $routing_key = 'hello';
    $queue = new AMQPQueue($channel);
    $queue->setName($routing_key);
    $queue->setFlags(AMQP_NOPARAM);
    $queue->declareQueue();
    echo ' [*] Waiting for messages. To exit press CTRL+C ', PHP_EOL;
    $queue->consume($callback_func);
} catch (AMQPQueueException $ex) {
    print_r($ex);
} catch (Exception $ex) {
    print_r($ex);
}
echo 'Close connection...', PHP_EOL;
$queue->cancel();
$connection->disconnect();
<?php

use Utility\AMQPConnect;
error_reporting(E_ALL | E_STRICT);
require_once 'bingo/odmconfig.php';
require_once __DIR__ . '/BingoStreamAMQPQueue.php';
use Constant\ErrorCode, Doctrine\Common\ClassLoader, Doctrine\Common\Annotations\AnnotationReader, Doctrine\Common\Annotations\IndexedReader, Doctrine\ODM\MongoDB\DocumentManager, Doctrine\MongoDB\Connection, Doctrine\ODM\MongoDB\Configuration, Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver;
// Initialize
set_time_limit(0);
// Create a new queue
$amqpcon = AMQPConnect::getInstance();
$cnn = $amqpcon->getConnection();
$q1 = new AMQPQueue($cnn);
$q1->declare('queue1');
$options = array('min' => 1, 'max' => 20);
// Bind it on the exchange to routing.key
//$q1->bind(\Constant\AMQPChannelConstant::AMF, \Constant\AMQPCommand::BingoBroadcast);
//$q1->bind(\Constant\AMQPChannelConstant::AMF, '4ebe6492aeac033931000000');
//$q1->bind(\Constant\AMQPChannelConstant::AMF, '#');
$q1->bind('4ebe6492aeac033931000000', 'bingo.#');
$logger = new \Utility\KLogger('/var/log/bingo/teststream.log', \Utility\GlobalConfiguration::GetInstance()->Config[\Constant\SectionType::Logging][\Constant\ConfigKey::LoggingLevel]);
do {
    // Read from the queue
    $messages = $q1->consume($options);
    if ($messages != NULL) {
        foreach ($messages as $msg) {
            echo $msg['message_body'];
            $logger->LogDebug($msg['message_body'] . PHP_EOL);
        }
    }
} while (1);
Exemple #19
0
$exchange_name = 'example.fanout';
$queue_name = 'example.fanout.default';
$route_key = 'ignored-for-fanout';
// establish connection
$connection = new AMQPConnection();
if (!$connection->connect()) {
    echo "Failed to establish connection", PHP_EOL;
    die;
}
// create channel
$channel = new AMQPChannel($connection);
// create exchange
$exchange = new AMQPExchange($channel);
$exchange->setType(AMQP_EX_TYPE_FANOUT);
$exchange->setName($exchange_name);
$exchange->declareExchange();
// if exchange already exists it will not be redeclared
// here we definitely need queue to be declared before we'll use it
$queue = new AMQPQueue($channel);
$queue->setName($queue_name);
$queue->declareQueue();
// same for queue, if already declared will not be redeclared
$queue->bind($exchange_name, $route_key);
// NOTE: if exchange doesn't exists you can't bind queue to it, which is
// although quite obvious
$queue->consume(function (AMQPEnvelope $envelope, AMQPQueue $queue) {
    $message = $envelope->getBody();
    echo "Received '{$message}' at " . date(DATE_RFC822), PHP_EOL;
    $queue->ack($envelope->getDeliveryTag());
});
Exemple #20
0
}
$timer = microtime(true) - $timer;
echo '    Get: ', $iterations, ' iterations took ', $timer, 'sec', PHP_EOL;
$q->delete();
$exchange->delete();
echo PHP_EOL;
// ==================================
$exchange = new AMQPExchange($ch);
$exchange->setType(AMQP_EX_TYPE_FANOUT);
$exchange->setFlags(AMQP_AUTODELETE);
$exchange->setName('benchmark_exchange_' . microtime(true));
$exchange->declareExchange();
$q = new AMQPQueue($ch);
$q->setFlags(AMQP_AUTODELETE);
$q->declareQueue();
$q->bind($exchange->getName());
$timer = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
    $exchange->publish($message);
}
$timer = microtime(true) - $timer;
echo 'Publish: ', $iterations, ' iterations took ', $timer, 'sec', PHP_EOL;
$consumer_iterations = $iterations;
$timer = microtime(true);
$q->consume(function () use(&$consumer_iterations) {
    return --$consumer_iterations > 0;
}, AMQP_AUTOACK);
$timer = microtime(true) - $timer;
echo 'Consume: ', $iterations, ' iterations took ', $timer, 'sec', PHP_EOL;
$q->delete();
$exchange->delete();
                $reSend->request_type = $data->request_type;
                $reSend->send_status = OutlookCalendarRequest::SEND_STATUS_COMPLETED;
                $reSend->save();
                App::$instance->log->logWrite(LOG_OTHER_EVENTS, "New Outlook request create for " . $user->id . ', vks: ' . $vks->id);
            } else {
                echo sprintf("Outlook Request to: user_id %s, and vks_id %s already sended, no force KEY detected", $data->user_id, $data->vks_id), PHP_EOL;
            }
        }
        Mail::sendIcalEvent($vks, $reSend->request_type, $user);
        App::$instance->log->logWrite(LOG_MAIL_SENDED, 'Outlook event invite sended to: ' . $user->email);
    } catch (Exception $e) {
        echo sprintf("Outlook Request to: user_id %s, and vks_id %s broken", $data->user_id, $data->vks_id), PHP_EOL;
    }
    $q->ack($message->getDeliveryTag());
    print '---------------ready!--------------' . "\r\n";
};
try {
    $queue = new AMQPQueue($channel);
    $queue->setName($routing_key);
    $queue->setFlags(AMQP_DURABLE);
    $queue->declareQueue();
    echo ' [*] Waiting for messages. To exit press CTRL+C ', PHP_EOL;
    $queue->consume($callback_func, AMQP_DURABLE, 'fetcher');
} catch (AMQPQueueException $ex) {
    print_r($ex);
} catch (Exception $ex) {
    print_r($ex);
}
echo 'Close connection...', PHP_EOL;
$queue->cancel();
$connection->disconnect();
Exemple #22
0
 /**
  * Consumes next message from queue and passes its payload to callback when it arrives
  *
  * @param string $queueName Queue name to consume message from
  * @param callable $callback Callback to pass payload to
  *
  * @throws \AMQPException
  */
 public function consume($queueName, callable $callback)
 {
     try {
         $queue = new \AMQPQueue($this->getChannel());
         $queue->setName($queueName);
         $queue->consume(function (\AMQPEnvelope $envelope, \AMQPQueue $queue) use($callback) {
             switch ($callback($envelope->getBody())) {
                 case self::MESSAGE_ACK:
                     $queue->ack($envelope->getDeliveryTag());
                     break;
                 case self::MESSAGE_NACK:
                     $queue->nack($envelope->getDeliveryTag());
                     break;
                 case self::MESSAGE_REQUEUE:
                     $queue->nack($envelope->getDeliveryTag(), AMQP_REQUEUE);
                     break;
             }
         });
     } catch (\AMQPException $e) {
         $this->channel = null;
         throw $e;
     }
 }
Exemple #23
0
<?php

require 'config.php';
$connection = new AMQPConnection($connect);
$connection->setTimeOut(1);
$connection->connect();
$channel = new AMQPChannel($connection);
$queue = new AMQPQueue($channel);
$queue->setName($qname);
$queue->setFlags(AMQP_DURABLE);
$queue->declare();
function procMsg($envelope, $queue)
{
    var_dump($envelope, $queue);
    $queue->ack($envelope->getdeliverytag());
}
while (true) {
    $queue->consume('procMsg');
}
$connection->disconnect();
Exemple #24
0
 * @author  yuansir <yuansir@live.cn/yuansir-web.com>
 */
$exchangeName = 'queues';
$queueName = 'task_queue';
$routeKey = 'task_queue';
$connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest'));
$connection->connect() or die("Cannot connect to the broker!\n");
$channel = new AMQPChannel($connection);
$exchange = new AMQPExchange($channel);
$exchange->setName($exchangeName);
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declare();
$queue = new AMQPQueue($channel);
$queue->setName($queueName);
$queue->setFlags(AMQP_DURABLE);
$queue->declare();
$queue->bind($exchangeName, $routeKey);
var_dump('[*] Waiting for messages. To exit press CTRL+C');
while (TRUE) {
    $queue->consume('callback');
    $channel->qos(0, 5);
}
$connection->disconnect();
function callback($envelope, $queue)
{
    $msg = $envelope->getBody();
    var_dump(" [x] Received:" . $msg);
    sleep(substr_count($msg, '.'));
    echo "recevied end";
    $queue->ack($envelope->getDeliveryTag());
}