コード例 #1
0
 /**
  * @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;
 }
コード例 #2
0
ファイル: Queue.php プロジェクト: prolic/HumusAmqp
 /**
  * @inheritdoc
  */
 public function setArgument(string $key, $value)
 {
     $this->queue->setArgument($key, $value);
 }
コード例 #3
0
ファイル: Queue.php プロジェクト: treehouselabs/queue
 /**
  * @inheritdoc
  */
 public function setArgument($key, $value)
 {
     return $this->delegate->setArgument($key, $value);
 }
コード例 #4
0
 /**
  * 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)]);
 }
コード例 #5
0
 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;
 }
コード例 #6
0
ファイル: Queue.php プロジェクト: csharpru/yii2-amqp
 /**
  * @param $key
  * @param $value
  *
  * @return bool
  */
 public function setArgument($key, $value)
 {
     return $this->rawQueue->setArgument($key, $value);
 }