Ich möchte wissen, wie man mit Amqpphplib verzögert.Wie verzögern? - php-amqplib
benutzen ich diese großen Kaffee-Skript-Tutorial:
https://github.com/jamescarr/rabbitmq-scheduled-delivery
aber es scheint nicht mit PHP-amqplib zu arbeiten.
Die Nachricht läuft ab, wie ich will, aber es scheint, dass "x-dead-letter-exchange" nicht die Arbeit machen. Ich habe die RabbitMQ-Verwaltungskonsole verwendet, und ich sehe die Erstellung und Löschung von Warteschlangen im Live-Modus. Aber meine Nachricht geht nach dem Ablauf in die unmittelbare Warteschlange. Ich benutze RabbitMQ 3.2.3 Version, PHP-amqplib 2.2. * Version.
ist hier mein Code:
Connection-Klasse:
class Connection
{
/**
* @var $ch
*/
public $ch;
/**
* @var $consumer_tag
*/
public $consumer_tag;
/**
* @var $exchange
*/
public $exchange;
/**
* @var $conn
*/
public $conn;
public function __construct($host, $port, $user, $password, $vhost)
{
$this->exchange = 'immediate';
$this->queue = 'right.now.queue';
$this->consumer_tag = 'consumer';
$this->conn = new AMQPConnection($host, $port, $user, $password, $vhost);
$this->ch = $this->conn->channel();
$this->ch->exchange_declare($this->exchange, 'direct', false, true, false);
$this->ch->queue_declare($this->queue, false, true, false, false, false);
$this->ch->queue_bind($this->queue, $this->exchange);
}
public function createDelayedQueue ($name, $delay_seconds) {
$this->ch->queue_declare($name, false, false, false, true, true, array(
"x-dead-letter-exchange" => array("S", $this->exchange),
"x-message-ttl" => array("I", $delay_seconds*1000),
"x-expires" => array("I", $delay_seconds*1000+1000)
));
}
}
Veröffentlichen Code
$name = 'send.later.'.$ts;
$amqp->createDelayedQueue($name, 2);
$msg = new AMQPMessage($msg_body, array('content_type' => 'text/plain', 'delivery_mode' => 2));
$amqp->ch->basic_publish($msg);
Consumer Code
$amqp = $this->getContainer()->get('amqp_connexion');
$amqp->ch->basic_consume($amqp->queue, $amqp->consumer_tag, false, false, false, false, function ($msg) {
echo $msg->body;
echo "\n--------\n";
});
$output->writeln('Listening '.$amqp->queue.'...');
// Loop as long as the channel has callbacks registered
while (count($amqp->ch->callbacks)) {
$amqp->ch->wait();
}
großartig! Danke ! – LucasC