/** * @param \AMQPExchange $exchange * @return \AMQPQueue */ protected function declareResponseQueue(\AMQPExchange $exchange) { $queue = new \AMQPQueue($exchange->getChannel()); $queue->setFlags(AMQP_EXCLUSIVE); if ($this->queueTimeout !== null) { $queue->setArgument("x-expires", $this->queueTimeout); } $queue->declareQueue(); return $queue; }
/** * @inheritdoc */ public function setArgument(string $key, $value) { $this->queue->setArgument($key, $value); }
/** * @inheritdoc */ public function setArgument($key, $value) { return $this->delegate->setArgument($key, $value); }
/** * Push a new job onto the queue after a delay. * * @param \DateTime|int $delay * @param string $job * @param mixed $data * @param string $queue * * @return mixed */ public function later($delay, $job, $data = '', $queue = null) { $delay = $this->getSeconds($delay); // declare queue $destinationQueue = $this->getQueue($queue); $destinationQueue->declareQueue(); // destination exchange $destinationExchange = $this->getExchangeForQueue($destinationQueue); // create the dead letter queue $deferredQueueName = sprintf('deferred from %s:%s for %ss', $destinationExchange->getName(), $destinationQueue->getName(), number_format($delay)); $deferredQueue = new \AMQPQueue($this->channel); $deferredQueue->setName($deferredQueueName); $deferredQueue->setFlags(AMQP_DURABLE); $deferredQueue->setArgument('x-dead-letter-exchange', $destinationExchange->getName() ?: ''); $deferredQueue->setArgument('x-dead-letter-routing-key', $destinationQueue->getName()); $deferredQueue->setArgument('x-expires', (int) (1.5 * $delay * 1000)); $deferredQueue->declareQueue(); return $destinationExchange->publish($this->createPayload($job, $data), $deferredQueue->getName(), AMQP_NOPARAM, ['delivery_mode' => 2, 'content_type' => 'application/json', 'expiration' => (string) ($delay * 1000)]); }
protected function getAMQPExchange() { if (is_null(self::$_AMQPExchange)) { $channel = new AMQPChannel($this->getAMQPConnection()); $exchange = new AMQPExchange($channel); $exchange->setName($this->getExchangeName()); $exchange->setType($this->getExchangeType()); $exchange->setFlags(AMQP_DURABLE); $exchange->declare(); $queue = new AMQPQueue($channel); $queue->setName($this->getQueueName()); $queue->setFlags(AMQP_DURABLE); $queue->setArgument('x-ha-policy', 'all'); $queue->declare(); $queue->bind($this->getExchangeName(), $this->getRoutingKey()); self::$_AMQPExchange = $exchange; } return self::$_AMQPExchange; }
/** * @param $key * @param $value * * @return bool */ public function setArgument($key, $value) { return $this->rawQueue->setArgument($key, $value); }