[rabbitmq-discuss] RabbitMQ + PHP and RPC

Denis box4dennis at gmail.com
Thu Jun 21 11:13:46 BST 2012


As far as I can see: my server.php and client.php scripts create *different 
channels* (and different connections) which seems to contradict the nature 
of exclusive queues. 
And I cannot see any way to reuse same channel (that is created at 
client.php) at server.php.

This probably means that I cannot use "official" PECL extension from 
php.net for building RPC at 
RabbitMQ: http://www.php.net/manual/en/amqp.installation.php
I think this issue may be considered as solved: impossible to use this 
library for RPC :-/

Thank you


On Thursday, June 21, 2012 1:54:37 PM UTC+4, Alvaro Videla wrote:
>
> In your Server code you need to publish your messages to the anonymous 
> exchange (which I'm not sure is possible with the library you are using).
>
> In your publish call use the queue name that you got in the reply_to 
> property.
>
> On Thu, Jun 21, 2012 at 11:48 AM, Denis wrote:
>
>> 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<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/**quest**ions/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<rabbitmq-discuss at lists.rabbitmq.com>
>>>> https://lists.rabbitmq.com/**cgi-bin/mailman/listinfo/**
>>>> rabbitmq-discuss<https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss>
>>>>
>>>>
>>>
>> _______________________________________________
>> 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/b6e0f19e/attachment.htm>


More information about the rabbitmq-discuss mailing list