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; }
/** * {@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); } }); }
/** * 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()])); }
/** * @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); } }
/** * 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; }
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); }
/** * 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; }
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.#'); }
/** * @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; }
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.!"); } }
/** * 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()); }
/** * 入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')); }
/** * 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; }
/** * 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; }
<?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();
<?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);
/** * 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; }
//创建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 {
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.
/** * @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); }
* @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()); }
$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();
} $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();
/** * @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]; }