Unfortunately the API for rabbitmq-c is rather low-level when it comes to reading messages from the broker, so when using amqp_basic_get() or amqp_basic_consume(), you will have to deal with reading individual frames to read the header and message body.<div>
<br></div><div>Off the top of my head here&#39;s what you&#39;d need to read a message off the wire using amqp_basic_get() (Note: this is off the top of my head, and doesn&#39;t deal with error handling well (just returns). �This is also using basic.get - which is a synchronous method of getting messages. For anything non-trivial, you probably want use amqp_basic_consume.</div>
<div><br></div><div><div>� amqp_rpc_reply_t reply =�</div><div>� � amqp_basic_get(</div><div>� � � connection,</div><div>� � � 1, /* channel id */</div><div>� � � amqp_cstring_bytes(&quot;queue name&quot;),</div><div>� � � 0); /* no_ack, the message will automatically be acked as its delievered */</div>
<div><br></div><div>� if (reply.reply_type != AMQP_RESPONSE_NORMAL)</div><div>� � return; /* bad reponse from broker */</div><div><br></div><div>� if (<a href="http://reply.reply.id">reply.reply.id</a> == AMQP_BASIC_GET_EMPTY_METHOD)</div>
<div>� � return; /* no messages in the queue to get */</div><div><br></div><div>� /* Read the header (1 frame) and the body (1 + x frames) */</div><div><br></div><div>� size_t body_remaining;</div><div>� amqp_frame_t frame;</div>
<div><br></div><div>� int res = amqp_simple_wait_frame(connection, &amp;frame);</div><div>� if (res != 0)</div><div>� � return; /* failure waiting for frame */</div><div>� if (frame.frame_type != AMQP_FRAME_HEADER)</div><div>
� � return; /* expecting AMQP_FRAME_HEADER type of frame */</div><div><br></div><div>� /* This memory is valid until you call amqp_maybe_release_buffers() */</div><div>� amqp_basic_properties_t *props =�</div><div>� � (amqp_basic_properties_t*)frame.payload.properties.decoded;</div>
<div>� body_remaining = frame.payload.properties.body_size;</div><div><br></div><div>� char* body = malloc(body_remaining);</div><div>� char* current_body_ptr = body;</div><div><br></div><div>� while (body_remaining)</div>
<div>� {</div><div>� � res = amqp_simple_wait_frame(connection, &amp;frame);</div><div>� � if (res != 0)</div><div>� � � return; /* failure waiting for frame */</div><div>� � if (frame.frame_type != AMQP_FRAME_BODY)</div>
<div>� � � return; /* expecting AMQP_BODY_HEADER */</div><div>� � memcpy(current_body_ptr, frame.payload.body_fragment.bytes, frame.payload.body_fragment.len);</div><div><br></div><div>� � current_body_ptr += frame.payload.body_fragment.len;</div>
<div>� � body_remaining -= frame.payload.body_fragment.len;</div><div>� }</div></div><div><br></div><div><br></div><div>HTH</div><div>-Alan</div><div><br></div><div><div class="gmail_quote">On Fri, Jun 8, 2012 at 9:19 AM, Mike Aubury <span dir="ltr">&lt;<a href="mailto:mike@aubit.com" target="_blank">mike@aubit.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi, sorry for such a simple question...<br>I had written some interface code in C using openAMQ - but I&#39;ve now realised that looks like its been canned - so I&#39;m looking at porting to something else...<br>
<br>I can get my head around putting stuff into the exchanges/queues etc<i> </i>(amq_basic_publish) from this code :�<div>
<br></div><div><br></div><div>� char *messagebody=&quot;Hello World&quot;;</div><div>� ...</div><div><div>� � amqp_basic_properties_t props;</div><div>� � props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG;</div>

<div>� � props.content_type = amqp_cstring_bytes(&quot;text/plain&quot;);</div><div>� � props.delivery_mode = 2; /* persistent delivery mode */</div><div>� � die_on_error(amqp_basic_publish(conn,</div><div>� � � � � � � � � � � � � � � � � � 1,</div>

<div>� � � � � � � � � � � � � � � � � � amqp_cstring_bytes(exchange),</div><div>� � � � � � � � � � � � � � � � � � amqp_cstring_bytes(routingkey),</div><div>� � � � � � � � � � � � � � � � � � 0,</div><div>� � � � � � � � � � � � � � � � � � 0,</div>

<div>� � � � � � � � � � � � � � � � � � &amp;props,</div><div>� � � � � � � � � � � � � � � � � � amqp_cstring_bytes(messagebody)),</div><div>� � � � � � � � �&quot;Publishing&quot;);</div></div><div><br></div><div><br>
</div>
<div>but pulling data off is escaping me atm..<br>
<br>Whats the **simplest way** of getting that data, as a full string I can then process ?<div>(All the examples seem to do strange things with frames/frame headers etc) ..</div><div><br></div><div>Ideally - I want to replace my existing :�</div>

<div><br></div><div>#define�BUFFSIZE 10000</div><div>�char message_text[BUFFSIZE];</div><div><br></div><div>�content = amq_client_session_basic_arrived (session);</div><div><div>�message_size = amq_content_basic_get_body (content,</div>

<div>� � � � � � � � � � � � � � � � � � � � � � �(byte *)</div><div>� � � � � � � � � � � � � � � � � � � � � � �message_text,</div><div>� � � � � � � � � � � � � � � � � � � � � � �sizeof (message_text));</div></div><div>

<br></div><div><br></div><div><br></div><div>and - so far I&#39;ve only got as far as :�</div><div><br></div><div><div>� �#define�BUFFSIZE 10000</div><div>� �char message_text[BUFFSIZE];</div></div><div><br></div><div><div>

� �amqp_simple_wait_frame(conn, &amp;frame);</div></div><div><br></div><div><br></div><div>;)</div><div><br></div><div><br></div><div><br></div><div>Any help, or pointers to some documentation would be much appreciated !
</div></div>
<br>_______________________________________________<br>
rabbitmq-discuss mailing list<br>
<a href="mailto:rabbitmq-discuss@lists.rabbitmq.com">rabbitmq-discuss@lists.rabbitmq.com</a><br>
<a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
<br></blockquote></div><br></div>