[rabbitmq-discuss] using ttl and dead-letter-exchange to retry after a delay, in PHP

Dave Alan Caruana dave at caruana.biz
Tue Oct 1 12:39:51 BST 2013


hello, I am trying to use dead-letter-exchange to create a 'delayed' queue,
basically my application takes input from an MQ and then posts the data 
(using curl) to an external website.
If the post operation fails I want it to wait a set amount of time and 
retry.
The idea is to publish these failed tries to a 'dead' queue with no 
consumer but with a timeout set up.
On expiry of the timeout, RabbitMQ should transfer these messages to the 
dead-letter-exchange which would be the original queue.

my code is currently here :

  public function publish_delay($data=false) {

    $connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
    $channel = $connection->channel();
    $channel->queue_declare('errorXchange',false,true,false,false,false,
                 array(
                       "x-dead-letter-exchange" => array("S", 
$this->channelname),
                       "x-message-ttl" => array("I", 5000),
                       "x-expires" => array("I", 6000)
                      )
                      );
    $msg = new AMQPMessage($data);
    $channel->basic_publish($msg,'','errorXchange');
    $channel->close();
    $connection->close();
  }

$msg -> is the message I want sent with a delay
$this->channelname would be the channel I want it to go to after the delay
'errorXchange' is the dead queue with the ttl & no consumer.

Currently nothing is coming through on $this->channelname (where there is a 
consumer, of course).
I haven't understood how to debug rabbitmq or what is going wrong, and 
there is precious little documentation!

help would be VERY welcome!

regards,
Dave in Malta.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20131001/a714e98e/attachment.htm>


More information about the rabbitmq-discuss mailing list