[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