[rabbitmq-discuss] RabbitMQ + PHP and RPC

Denis box4dennis at gmail.com
Thu Jun 21 10:48:19 BST 2012


Sorry for me writing here: I can't figure out how to use mailing list for 
replies =/


My Client.php declares callback queue php-object as following:

$callbackQueue = new \AMQPQueue($channel);
$callbackQueue->setFlags(AMQP_EXCLUSIVE); // set EXCLUSIVE flag
$callbackQueue->declare();

After that I pass it's name at an envelope to server like this 
($callbackQueue->getName at 'reply_to')

$exchange->publish(
    json_encode(array('process me!')),
    'temp_action',
    AMQP_MANDATORY,
    array(
        'reply_to' => $callbackQueue->getName(), // pass callback queue name
        'correlation_id' => $correlationId
    )
);


And my Server.php creates a new Queue php-object (in an anonymous function 
that handles consuming) as following:

    $callbackQueue = new \AMQPQueue($channel);
    $callbackQueue->setName($envelope->getReplyTo());
    $callbackQueue->setFlags(AMQP_EXCLUSIVE); // set EXCLUSIVE flag

Right after that moment I'm trying to bind newly created $callbackQueue 
object to an exchange - and this causes blocking issue.


I'm not sure which exact options are different (exclusive looks for me to 
be the only flag I set in both cases). 
Setting name in Server.php is necessary and name is taken from envelope's 
'reply_to' setting. 

As far as I can see no extra declaration of callback queue is happening on 
a Server.php side. (Although tempQueue Server consumes messages from is 
extra declared, but this is made for server to be able to listen that queue 
even when before any client exists)

On Thursday, June 21, 2012 12:33:42 PM UTC+4, Alvaro Videla wrote:
>
> While not using the same library here you have the official tutorials 
> ported to PHP
>
> https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/php
>
> The problem in your code is that you declare queues with different 
> options. 
>
> So as one reply say, if you declare queue A as durable, then every other 
> declaration of that queue must be durable. The same for the exclusive flag.
>
> Also you don't need to redeclare a queue to publish messages to it. As an 
> RPC server you assume that the address sent in the 'reply_to' property is 
> already present. I think is the responsibility of the RpcClient to make 
> sure the queue where it is waiting for replies exists already.
>
> Regards,
>
> Alvaro
>
> And you can indeed do RPC over RabbitMQ by using different connections.
>
> On Wed, Jun 20, 2012 at 8:03 PM, Denis wrote:
>
>> Hello guys.
>>
>> I'm trying to build RPC using PHP, here is my description of problem:
>> http://stackoverflow.com/**questions/11104004/rabbitmq-**
>> rpc-exclusive-queues-locking-**php<http://stackoverflow.com/questions/11104004/rabbitmq-rpc-exclusive-queues-locking-php>
>>
>> The main issue I suspect is that Client.php and Server.php try to connect 
>> to RabbitMQ server using different connections, which leads to inability of 
>> using EXCLUSIVE queue (that is declared in CLient.php) from Server.php
>>
>> Can u give me a way I can dig to? I'm out of ideas ...
>>
>> _______________________________________________
>> rabbitmq-discuss mailing list
>> rabbitmq-discuss at lists.rabbitmq.com
>> https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20120621/0937d3fb/attachment.htm>


More information about the rabbitmq-discuss mailing list