Esempio n. 1
0
 private function _initPublisher()
 {
     if (!$this->open()) {
         return false;
     }
     if ($this->_exchange) {
         return true;
     }
     $channel = new AMQPChannel($this->_conn);
     //创建exchange
     $this->_exchange = new AMQPExchange($channel);
     $this->_exchange->setName($this->_connInfo['exchangeName']);
     $this->_exchange->setType(AMQP_EX_TYPE_DIRECT);
     $this->_exchange->setFlags(AMQP_DURABLE);
     if (!$this->_exchange->declareExchange()) {
         $this->close();
         return false;
     }
     //创建队列,生产者和消费者都要创建队列
     $queue = new AMQPQueue($channel);
     $queue->setName($this->_connInfo['queueName']);
     $queue->setFlags(AMQP_DURABLE);
     $queue->declareQueue();
     $queue->bind($this->_connInfo['exchangeName'], $this->_connInfo['routingKey']);
     return true;
 }
Esempio n. 2
0
 /**
  * {@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);
         }
     });
 }
Esempio n. 3
0
 /**
  * Bind queue to exchange using dispatcher event names as routing keys
  *
  * @return void
  * @throws AMQPExchangeException
  */
 public function bind(\AMQPQueue $queue, \AMQPExchange $exchange)
 {
     $events = preg_grep($this->pattern, array_keys($this->getDispatcher()->getListeners()));
     foreach ($events as $eventName) {
         $queue->bind($exchange->getName(), $eventName);
     }
     $this->dispatcher->dispatch(static::BIND_EVENT, new SymfonyEvent($events, ["pattern" => $this->pattern, "exchange" => $exchange->getName(), "queue" => $queue->getName()]));
 }
Esempio n. 4
0
 /**
  * @param Exchange|string $exchange
  * @param string          $routingKey
  * @param array           $arguments
  *
  * @return bool
  */
 public function bind($exchange, $routingKey = null, array $arguments = [])
 {
     $exchange = AmqpHelper::getExchangeName($exchange);
     try {
         return $this->rawQueue->bind($exchange, $routingKey, $arguments);
     } catch (\Exception $e) {
         ClientHelper::throwRightException($e);
     }
 }
Esempio n. 5
0
 /**
  * AMQP queue initialization
  * @param string $name Queue name
  * @param string $mode Access mode: r is for reading and w is for writing
  * @return \AMQPQueue
  */
 public function init($name, $mode = 'w')
 {
     $queue = new \AMQPQueue($this->channel);
     $queue->setName($name);
     $queue->declare();
     if ($mode == 'r') {
         $queue->bind('Celium', $name);
     }
     return $queue;
 }
Esempio n. 6
0
 public function it_should_initialize(\AMQPQueue $queue, Exchange $exchange, Context $context)
 {
     $exchange->getName()->willReturn('exchange');
     $context->getFlags()->willReturn(1234);
     $context->getArguments()->willReturn(['foo' => 'bar']);
     $queue->setName('queue')->shouldBeCalled();
     $queue->bind('exchange')->shouldBeCalled();
     $queue->setFlags(1234)->shouldBeCalled();
     $queue->setArguments(['foo' => 'bar'])->shouldBeCalled();
     $queue->declareQueue()->shouldBeCalled();
     $this->initialize($queue);
     $this->isInitialized()->shouldReturn(true);
 }
Esempio n. 7
0
 /**
  * Get transport queue for current channel.
  * @return AMQPQueue
  */
 protected function _getQueue()
 {
     if (!$this->_queue) {
         //创建队列
         $this->_queue = new \AMQPQueue($this->_getChannel());
         //设置队列名字 如果不存在则添加
         $this->_queue->setName($this->_params['queue']);
         $this->_queue->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
         $this->_queue->declareQueue();
         //将你的队列绑定到routingKey
         $this->_queue->bind($this->_params['exchange'], $this->_params['router']);
     }
     return $this->_queue;
 }
Esempio n. 8
0
File: Amqp.php Progetto: rgwybb/tars
 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()
 {
     // 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);
     }
 }
 /**
  * {@inheritDoc}
  */
 protected function setUpAmqp()
 {
     $this->conn = new \AMQPConnection(['host' => $_SERVER['AMQP_HOST'], 'port' => $_SERVER['AMQP_PORT'], 'login' => $_SERVER['AMQP_USER'], 'password' => $_SERVER['AMQP_PASS'], 'vhost' => $_SERVER['AMQP_VHOST']]);
     $this->conn->connect();
     $channel = new \AMQPChannel($this->conn);
     $exchange = new \AMQPExchange($channel);
     $exchange->setName('event_band.test.exchange');
     $exchange->setFlags(AMQP_AUTODELETE);
     $exchange->setType(AMQP_EX_TYPE_TOPIC);
     $exchange->declareExchange();
     $queue = new \AMQPQueue($channel);
     $queue->setName('event_band.test.event');
     $queue->declareQueue();
     $queue->bind('event_band.test.exchange', 'event.#');
 }
Esempio n. 11
0
 /**
  * @param \AMQPQueue|null $queue
  *
  * @throws HectorException
  */
 public function initialize(\AMQPQueue $queue = null)
 {
     if (true === $this->isInitialized()) {
         throw new HectorException('Queue already initialized');
     }
     if (null === $queue) {
         $queue = new \AMQPQueue($this->channel->getWrappedChannel());
     }
     $this->queue = $queue;
     $this->queue->setName($this->getName());
     $this->queue->bind($this->exchange->getName());
     $this->queue->setFlags($this->context->getFlags());
     $this->queue->setArguments($this->context->getArguments());
     $this->queue->declareQueue();
     $this->initialized = true;
 }
Esempio n. 12
0
 public function send($msg)
 {
     $channel = new \AMQPChannel($this->connection);
     $exchange = new \AMQPExchange($channel);
     $exchange->setFlags(AMQP_DURABLE);
     $exchange->setName('exchange2');
     $exchange->setType('direct');
     //$exchange->declare();
     $exchange->declareExchange();
     $queue = new \AMQPQueue($channel);
     $queue->setName('series');
     $queue->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
     //$queue->declare();
     $queue->declareQueue();
     $queue->bind('exchange2', 'series');
     $channel->startTransaction();
     $message = $exchange->publish(json_encode($msg), 'series', AMQP_MANDATORY, array('content_type' => 'application/json', 'delivery_mode' => 2));
     $channel->commitTransaction();
     if (!$message) {
         throw new \SYSTEM\LOG\ERROR("Error: Message '" . $message . "' was not sent to queue.!");
     }
 }
Esempio n. 13
0
 /**
  * Return result of task execution for $task_id
  * @param AMQPConnection $connection Connection object
  * @param string $task_id Celery task identifier
  * @param boolean $removeMessageFromQueue whether to remove message from queue
  * @return array array('body' => JSON-encoded message body, 'complete_result' => AMQPEnvelope object)
  * 			or false if result not ready yet
  */
 function GetMessageBody($connection, $task_id, $removeMessageFromQueue = true)
 {
     $this->Connect($connection);
     $ch = $connection->channel;
     $q = new AMQPQueue($ch);
     $q->setName($task_id);
     $q->setFlags(AMQP_AUTODELETE | AMQP_DURABLE);
     $q->declareQueue();
     try {
         $q->bind('celeryresults', $task_id);
     } catch (AMQPQueueException $e) {
         if ($removeMessageFromQueue) {
             $q->delete();
         }
         $connection->disconnect();
         return false;
     }
     $message = $q->get(AMQP_AUTOACK);
     if (!$message) {
         if ($removeMessageFromQueue) {
             $q->delete();
         }
         $connection->disconnect();
         return false;
     }
     if ($message->getContentType() != 'application/json') {
         if ($removeMessageFromQueue) {
             $q->delete();
         }
         $connection->disconnect();
         throw new CeleryException('Response was not encoded using JSON - found ' . $message->getContentType() . ' - check your CELERY_RESULT_SERIALIZER setting!');
     }
     if ($removeMessageFromQueue) {
         $q->delete();
     }
     $connection->disconnect();
     return array('complete_result' => $message, 'body' => $message->getBody());
 }
Esempio n. 14
0
 /**
  * 入RabbitMQ队列
  * @param [type] $exName    [交换机名]
  * @param [type] $routingKey [路由名]
  * @param [type] $value     [队列的值]
  * @param [type] $dbType     [数据库类型,默认为mysql]
  * 按照此规则生成的默认队列名称为 exName_routeKey_dbType;值为value
  */
 public function set($exName, $routingKey, $value, $dbType = 'mysql')
 {
     //创建交换机,设置交换机名
     $ex = new \AMQPExchange($this->channel);
     $ex->setName($exName);
     $ex->setType(AMQP_EX_TYPE_DIRECT);
     //广播模式
     $ex->setFlags(AMQP_DURABLE);
     //交换器进行持久化,即 RabbitMQ 重启后会自动重建
     // $ex->declareExchange();
     //设置队列名
     $queue = new \AMQPQueue($this->channel);
     $queue->setName($exName . '_' . $routingKey . '_' . $dbType);
     $queue->setFlags(AMQP_DURABLE);
     //队列进行持久化,即 RabbitMQ 重启后会自动重建
     $queue->declareQueue();
     //交换机和路由绑定到队列
     $queue->bind($exName, $routingKey);
     //入队列
     if (is_array($value)) {
         $value = json_encode($value);
     }
     $ex->publish($value, $routingKey, AMQP_NOPARAM, array('delivery_mode' => '2'));
 }
Esempio n. 15
0
 /**
  * Connect to queue, see if there's a result waiting for us
  * Private - to be used internally
  */
 private function getCompleteResult()
 {
     if ($this->complete_result) {
         return $this->complete_result;
     }
     $this->connection->connect();
     $ch = new AMQPChannel($this->connection);
     $q = new AMQPQueue($ch);
     $q->setName($this->task_id);
     $q->setFlags(AMQP_AUTODELETE);
     #		$q->setArgument('x-expires', 86400000);
     $q->declareQueue();
     try {
         $q->bind('celeryresults', $this->task_id);
     } catch (AMQPQueueException $e) {
         $q->delete();
         $this->connection->disconnect();
         return false;
     }
     $message = $q->get(AMQP_AUTOACK);
     if (!$message) {
         $q->delete();
         $this->connection->disconnect();
         return false;
     }
     $this->complete_result = $message;
     if ($message->getContentType() != 'application/json') {
         $q->delete();
         $this->connection->disconnect();
         throw new CeleryException('Response was not encoded using JSON - found ' . $message->getContentType() . ' - check your CELERY_RESULT_SERIALIZER setting!');
     }
     $this->body = json_decode($message->getBody());
     $q->delete();
     $this->connection->disconnect();
     return false;
 }
Esempio n. 16
0
 /**
  * Read all messages
  *
  * @access public
  *
  * @param string $chat name chat room
  * @param string $route name route
  * @param string $nameReader name queue
  *
  * @return array
  * @throws \AMQPConnectionException
  * @throws \AMQPQueueException
  * @throws \AMQPChannelException
  */
 public function readAll($chat, $route, $nameReader)
 {
     $queue = new \AMQPQueue($this->channel);
     $queue->setName($nameReader);
     /** @noinspection PhpUndefinedMethodInspection */
     $queue->declare();
     $queue->bind($chat, $route);
     $result = [];
     while ($envelop = $queue->get()) {
         $queue->ack($envelop->getDeliveryTag());
         $result[] = $envelop;
     }
     return $result;
 }
Esempio n. 17
0
<?php

require 'config.php';
$connection = new AMQPConnection($connect);
$connection->connect();
$channel = new AMQPChannel($connection);
$exchange = new AMQPExchange($channel);
$exchange->setName($exname);
$exchange->setType(AMQP_EX_TYPE_TOPIC);
$exchange->setFlags(AMQP_DURABLE);
$exchange->declare();
$queue = new AMQPQueue($channel);
$queue->setName($qname);
$queue->setFlags(AMQP_DURABLE);
$queue->declare();
$queue->bind($exname, $routekey);
$channel->startTransaction();
$message = json_encode(array('Hello World! 测试消息!', 'TOPIC'));
$exchange->publish($message, $routekey);
$channel->commitTransaction();
$connection->disconnect();
Esempio n. 18
0
<?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);
Esempio n. 19
0
 /**
  * Get queue
  *
  * @param string $name The queue name
  *
  * @return \AMQPQueue
  */
 protected function getQueue($name)
 {
     if (isset($this->queues[$name])) {
         return $this->queues[$name];
     }
     $config = $this->getConfig('queue', $name);
     if (null === $config) {
         throw new \InvalidArgumentException("Queue definition '{$name}' doesn't exists.");
     }
     $connection = $this->getConnection($config['connection']);
     $this->queues[$name] = $queue = new \AMQPQueue($connection['channel']);
     $queue->setFlags(Helper\Options::toFlags($config));
     $queue->setName(is_callable($config['name']) ? call_user_func($config['name']) : $config['name']);
     $queue->declareQueue();
     if (isset($config['bindings'])) {
         foreach ($config['bindings'] as $binding) {
             try {
                 $this->getExchange($binding['exchange']);
             } catch (\InvalidArgumentException $e) {
             }
             $exchangeConfig = $this->getConfig('exchange', $binding['exchange']);
             $queue->bind($exchangeConfig['name'], $binding['routing_key'], isset($binding['arguments']) ? $binding['arguments'] : []);
         }
     }
     if (!empty($config['arguments'])) {
         if (isset($config['arguments']['x-dead-letter-exchange'])) {
             try {
                 $this->getExchange($config['arguments']['x-dead-letter-exchange']);
             } catch (\InvalidArgumentException $e) {
             }
         }
         $queue->setArguments($config['arguments']);
     }
     return $queue;
 }
Esempio n. 20
0
//创建channel
$channel = new AMQPChannel($conn);
//注:队列跟exchange 都需要基于channel channel基于connection
$ex = new AMQPExchange($channel);
//新建exchange
$ex->setName($e_name);
//创建exchange的名字
$ex->setType(AMQP_EX_TYPE_DIRECT);
//TPYE DIRECT 添加进绑定key的所有的队列,FANOUT 添加进绑定的所有队列 TOPIC 自定义的规则 . 连接多个队列 #为通配符
$ex->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
echo "exchange status:" . $ex->declare();
echo "\n";
//创建队列
$q = new AMQPQueue($channel);
//新建队列
//设置队列的名字 如果不存在则自动添加
$q->setName($q_name);
$q->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
//添加属性 DURABLE持久的 AUTODELEETE没有连接自动删除
echo "queue status:" . $q->declare();
//声明队列
echo "\n";
echo 'queue bind:' . $q->bind($e_name, $r_key);
//将队列绑定到routingKey
echo "\n";
$channel->startTransaction();
echo "send: " . $ex->publish($message, $r_key);
//将数据通过routingKey发送
$channel->commitTransaction();
$conn->disconnect();
//关闭连接
include 'storage.php';
/**
 * Подключаемся к брокеру и точке обмена сообщениями
 */
$rabbit = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'login' => 'guest', 'password' => 'guest'));
$rabbit->connect();
$channel = new AMQPChannel($rabbit);
$queue = new AMQPExchange($channel);
$queue->setName('amq.direct');
/**
 * Добавляем очередь откуда будем брать страницы
 */
$q = new AMQPQueue($channel);
$q->setName('images_to_scan');
$q->declare();
$q->bind('amq.direct', 'analyze_image');
/**
 * Обрабатываем пока в очереди не закончатся сообщения
 */
while (true) {
    $image = $q->get();
    if ($image) {
        $url = $image->getBody();
        echo "Checking: {$url}\n";
        $analyzer = new ImageAnalyzer($url);
        /**
         * Если картинка еще не была проанализирована, обрабатываем и добавляем в индекс
         */
        $analyzer->analyze();
        $q->ack($image->getDeliveryTag());
    } else {
Esempio n. 22
0
     exit("AMQP Connection Failed\n");
 }
 $tmps = explode('@', $user);
 $owner = isset($tuser) ? $tuser : $tmps[0];
 // RabbitMQ server login info
 $login = array('host' => $rhost, 'port' => $rport, 'vhost' => $rvhost, 'login' => $ruser, 'password' => $rpswd);
 // Establish a connection with the AMQP broker
 $conn = new AMQPConnection($login);
 $conn->connect();
 // assume the AMQP broker has the specified exchange configured.
 #$ex = new AMQPExchange($conn);
 #$ex->declare($exchange, $exType);
 $q = new AMQPQueue($conn, $queue);
 // create a queue, if exsiting, do nothing.
 $q->declare();
 $q->bind($exchange, $rkey);
 // binds the queue to the routing key on the exchange
 #$ex->bind($queue, $rkey);
 // this sample will keep on running until retrieves expected notification message.
 while (true) {
     echo "Please wait ...\n";
     sleep(10);
     // get message from the queue in every 10 seconds.
     $ret = $q->get();
     if (array_key_exists('msg', $ret)) {
         $msg = $ret['msg'];
         // get the message
     }
     if (isset($msg)) {
         echo $msg . "\n";
         // Get Notification data object from the notification message.
Esempio n. 23
0
 /**
  * @inheritdoc
  */
 public function bind($exchangeName, $routingKey, array $arguments = [])
 {
     return $this->delegate->bind($exchangeName, $routingKey, $arguments);
 }
$binding_keys = array_slice($argv, 1);
if (empty($binding_keys)) {
    file_put_contents('php://stderr', "Usage: {$argv[0]} [binding_key]...\n");
    exit(1);
}
echo " [*] Waiting for logs. To exit press CTRL+C", PHP_EOL;
$callback_func = function (AMQPEnvelope $message, AMQPQueue $q) {
    echo sprintf(" [X] [%s] %s", $message->getRoutingKey(), $message->getBody()), PHP_EOL;
    $q->nack($message->getDeliveryTag());
    return true;
};
try {
    //Declare Exchange
    $exchange_name = 'topic_logs';
    $exchange = new AMQPExchange($channel);
    $exchange->setType(AMQP_EX_TYPE_TOPIC);
    $exchange->setName($exchange_name);
    $exchange->declareExchange();
    //Declare Queue
    $queue = new AMQPQueue($channel);
    $queue->setFlags(AMQP_EXCLUSIVE);
    $queue->declareQueue();
    foreach ($binding_keys as $binding_key) {
        $queue->bind($exchange_name, $binding_key);
    }
    $queue->consume($callback_func);
} catch (AMQPQueueException $ex) {
    print_r($ex);
} catch (Exception $ex) {
    print_r($ex);
}
Esempio n. 25
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());
}
Esempio n. 26
0
$connection = new AMQPConnection();
$connection->setHost('127.0.0.1');
$connection->setLogin('guest');
$connection->setPassword('guest');
$connection->connect();
//Create and declare channel
$channel = new AMQPChannel($connection);
try {
    //Declare Exchange
    $exchange_name = 'logs';
    $exchange = new AMQPExchange($channel);
    $exchange->setType(AMQP_EX_TYPE_FANOUT);
    $exchange->setName($exchange_name);
    $exchange->declareExchange();
    //Do not declasre the queue name by setting AMQPQueue::setName()
    $queue = new AMQPQueue($channel);
    $queue->setFlags(AMQP_EXCLUSIVE);
    $queue->declareQueue();
    $queue->bind($exchange_name, $queue->getName());
    echo sprintf("Queue Name: %s", $queue->getName()), PHP_EOL;
} catch (Exception $ex) {
    print_r($ex);
}
//Read from stdin
$message = implode(' ', array_slice($argv, 1));
if (empty($message)) {
    $message = "info: Hello World!";
}
$exchange->publish($message, '');
echo " [X] Sent {$message}", PHP_EOL;
$connection->disconnect();
//Establish connection to AMQP
$connection = new AMQPConnection();
$connection->setHost('127.0.0.1');
$connection->setLogin('guest');
$connection->setPassword('guest');
$connection->connect();
//Declare Channel
$channel = new AMQPChannel($connection);
$routing_key = $severity = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'info';
$message = implode(' ', array_slice($argv, 2));
if (empty($message)) {
    $message = 'Hello World!';
}
try {
    //Declare Exchange
    $exchange_name = 'direct_logs';
    $exchange = new AMQPExchange($channel);
    $exchange->setType(AMQP_EX_TYPE_DIRECT);
    $exchange->setName($exchange_name);
    $exchange->declareExchange();
    $queue = new AMQPQueue($channel);
    $queue->setFlags(AMQP_EXCLUSIVE);
    $queue->setName('monitor.1');
    $queue->declareQueue();
    $queue->bind($exchange_name, $routing_key);
    $exchange->publish($message, $routing_key);
    echo " [x] Sent {$severity}:{$message}", PHP_EOL;
} catch (Exception $ex) {
    print_r($ex);
}
$connection->disconnect();
Esempio n. 28
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();
Esempio n. 29
0
 /**
  * @inheritdoc
  */
 public function bind(string $exchangeName, string $routingKey = '', array $arguments = [])
 {
     $this->queue->bind($exchangeName, $routingKey, $arguments);
 }
 /**
  * @param $name
  * @param string $channelName
  * @return \AMQPQueue
  */
 public function getQueue($name = 'default', $channelName = 'default')
 {
     $key = $channelName . '_' . $name;
     if (!isset($this->queues[$key])) {
         $channel = $this->getChannel($channelName);
         if (!isset($this->queuesSettings[$name])) {
             throw new \LogicException('No settings for queue ' . $name);
         }
         $settings = $this->queuesSettings[$name];
         $queue = new \AMQPQueue($channel);
         if ($settings['name'] !== null) {
             $queue->setName($settings['name']);
         }
         $queueFlags = AMQP_NOPARAM;
         if ($settings['durable']) {
             $queueFlags |= AMQP_DURABLE;
         }
         if ($settings['exclusive']) {
             $queueFlags |= AMQP_EXCLUSIVE;
         }
         if ($settings['autoDelete']) {
             $queueFlags |= AMQP_AUTODELETE;
         }
         if ($settings['passive']) {
             $queueFlags |= AMQP_PASSIVE;
         }
         $queue->setFlags($queueFlags);
         $queue->declareQueue();
         $this->queuesSettings[$name]['name'] = $queue->getName();
         $this->queues[$key] = $queue;
         //Warning place possible circular links
         if ($settings['from_exchanges'] !== null) {
             foreach ($settings['from_exchanges'] as $binExchangeName => $routingKeys) {
                 $bindExchange = $this->getExchange($binExchangeName, $channelName);
                 foreach ($routingKeys as $routingKey) {
                     $queue->bind($bindExchange->getName(), $routingKey);
                 }
             }
         }
     }
     return $this->queues[$key];
 }