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)); }
/** * @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()); }
/** * @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); } }
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'); }
/** * 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); } }
/** * Синхронный вызов * @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; }
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); }
/** * @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);
$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()); });
} $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();
/** * 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; } }
<?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();
* @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()); }