[rabbitmq-discuss] [RabbitMQ-c] Question about amqp_listen example

Roberto Pagliari roberto at canary.is
Fri Jan 17 20:01:29 GMT 2014


Hi Alan,
I'm not sure if I understand correctly. Are you saying that
amqp_consume_message would enter the while loop again? By looking at the
sample code of listen.c I don't think you ever want to leave the while(1)
loop, right?


On Fri, Jan 17, 2014 at 12:53 AM, Alan Antonuk <alan.antonuk at gmail.com>wrote:

> Yes.  A continue wouldn't work, calling amqp_consume_message() again after
> it fails won't work. See
>
> https://github.com/alanxz/rabbitmq-c/blob/master/librabbitmq/amqp.h#L2152
>
> -Alan
>
>
> On Thu, Jan 16, 2014 at 8:50 PM, Roberto Pagliari <roberto at canary.is>wrote:
>
>> Hi Alan,
>> a break statement should exit the while loop isnt it? I expected to see a
>> 'continue', instead...
>>
>> Roberto
>>
>>
>>
>> On Thu, Jan 16, 2014 at 9:44 PM, Alan Antonuk <alan.antonuk at gmail.com>wrote:
>>
>>>
>>>
>>>
>>> On Thu, Jan 16, 2014 at 4:51 PM, Roberto Pagliari <roberto at canary.is>wrote:
>>>
>>>> I have a couple of questions about the overall functioning of
>>>> Rabbitmq-c.
>>>>
>>>> From amqp_listen.c I see the following code:
>>>>
>>>>   {
>>>>
>>>>
>>>>     while (1) {
>>>>       amqp_rpc_reply_t res;
>>>>
>>>>       amqp_envelope_t envelope;
>>>>
>>>>       amqp_maybe_release_buffers(conn);
>>>>
>>>>       res = amqp_consume_message(conn, &envelope, NULL, 0);
>>>>
>>>>
>>>>
>>>>
>>>>       if (AMQP_RESPONSE_NORMAL != res.reply_type) {
>>>>
>>>>
>>>>
>>>>         break;
>>>>       }
>>>>
>>>>       printf("Delivery %u, exchange %.*s routingkey %.*s\n",
>>>>
>>>>
>>>>
>>>>              (unsigned) envelope.delivery_tag,
>>>>
>>>>
>>>>
>>>>              (int) envelope.exchange.len, (char *) envelope.exchange.bytes,
>>>>
>>>>
>>>>
>>>>              (int) envelope.routing_key.len, (char *) envelope.routing_key.bytes);
>>>>
>>>>
>>>>
>>>>
>>>>       if (envelope.message.properties._flags & AMQP_BASIC_CONTENT_TYPE_FLAG) {
>>>>
>>>>
>>>>
>>>>         printf("Content-type: %.*s\n",
>>>>
>>>>
>>>>
>>>>                (int) envelope.message.properties.content_type.len,
>>>>
>>>>
>>>>
>>>>                (char *) envelope.message.properties.content_type.bytes);
>>>>
>>>>
>>>>
>>>>       }
>>>>
>>>>       amqp_destroy_envelope(&envelope);
>>>>
>>>>
>>>>
>>>>     }
>>>>   }
>>>>
>>>>
>>>> First off, the output I'm getting when sending the string "Hello world"
>>>> is
>>>> $ ./amqp_listen localhost 5672 amq.direct test
>>>> Delivery 1, exchange amq.direct routingkey test
>>>> Content-type: text/plain
>>>>
>>>>
>>>> 1) Is that what the output should be like? I though it was supposed to
>>>> print out the string sent with amqp_sendstring on the other side.
>>>>
>>> The output is correct, it does not print out the body of the message.
>>>
>>>>  2) In the code above, it looks like the printf is performed every
>>>> time, regardless of weather a message has been received or not. However,
>>>> only when a message is actually received, the printf will execute. Could
>>>> someone explain me why this is the case?
>>>>
>>> The if (AMQP_RESPONSE_NORMAL != res.reply_type) break; statement will
>>> break out of the loop if the message isn't received.
>>>
>>> -Alan
>>>
>>> _______________________________________________
>>> rabbitmq-discuss mailing list
>>> rabbitmq-discuss at lists.rabbitmq.com
>>> 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
>>
>>
>
> _______________________________________________
> 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/20140117/9dc03a5e/attachment.html>


More information about the rabbitmq-discuss mailing list