<HTML>
<HEAD>
<TITLE>Synchronous publish with C client</TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>I know that publish is asynchronous, but from other threads I&#8217;ve read I thought that selecting the channel for a transaction, calling publish and then calling commit could be used to accomplish it. &nbsp;I&#8217;ve tried doing this in my C code and have been unable to get it to work. &nbsp;I&#8217;m using the amq.direct exchange and sending to a nonexistent queue using the mandatory and immediate flags. &nbsp;It appears as though the message is being silently dropped by the server though. &nbsp;I&#8217;m running rabbitmQ version 2.2. &nbsp;Here is the code I&#8217;m using. &nbsp;Please let me know of any errors there might be in my logic or code. &nbsp;All I get is<BR>
<BR>
[*] Sending some message<BR>
<BR>
outputted when I run this. &nbsp;I would expect to see the &#8216;Error committingtx&#8217; print if the queue does not exist though.<BR>
<BR>
int main(int argc, char *argv[])<BR>
{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;int rc;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;int sockfd;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;uint16_t channel = 1;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_rpc_reply_t reply;<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_connection_state_t conn = amqp_new_connection();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;//Connect<BR>
&nbsp;&nbsp;&nbsp;&nbsp;sockfd = amqp_open_socket(&quot;localhost&quot;, 5672);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;if (sockfd &lt; 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Error connecting to localhost:5672\n&quot;);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_set_sockfd(conn, sockfd);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_login(conn, &quot;/&quot; /* vhost */, 0 /* channel_max */,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;131072 /* frame_max */, 0 /* heartbeat */,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AMQP_SASL_METHOD_PLAIN, &quot;guest&quot;, &quot;guest&quot;);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;//Create a channel<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_channel_open(conn, channel);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;//Set up tx<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_tx_select(conn, channel);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;reply = amqp_get_rpc_reply(conn);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;if (reply.reply_type != AMQP_RESPONSE_NORMAL)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Error selecting tx\n&quot;);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;//Send &nbsp;message<BR>
&nbsp;&nbsp;&nbsp;&nbsp;const char *message = &quot;some message&quot;;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;[*] Sending %s\n&quot;, message);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_basic_properties_t props;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;memset(&amp;props, 0x00, sizeof(props));<BR>
&nbsp;&nbsp;&nbsp;&nbsp;props.delivery_mode = 2; //persistent<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;rc = amqp_basic_publish(conn, channel, amqp_cstring_bytes(&quot;amq.direct&quot;),<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amqp_cstring_bytes(&quot;nonexistent_queue&quot;), 1 /*mandatory*/,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 /*immediate*/, &amp;props, amqp_cstring_bytes(message));<BR>
&nbsp;&nbsp;&nbsp;&nbsp;if (rc != 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *errstr = amqp_error_string(-rc);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Error publishing: %s\n&quot;, errstr);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(errstr);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;//Now send commit and see if it worked<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_tx_commit(conn, channel);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;reply = amqp_get_rpc_reply(conn);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;if (reply.reply_type != AMQP_RESPONSE_NORMAL)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Error committing tx\n&quot;);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;reply = amqp_channel_close(conn, channel, AMQP_REPLY_SUCCESS);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;if (reply.reply_type != AMQP_RESPONSE_NORMAL)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Error closing channel\n&quot;);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;}<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_connection_close(conn, AMQP_REPLY_SUCCESS);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;amqp_destroy_connection(conn);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>
}<BR>
<BR>
Cheers,<BR>
Shane<BR>
</SPAN></FONT>
<pre>


***************
This e-mail and any files transmitted with it may contain confidential and/or proprietary information. It is intended solely for the use of the individual or entity who is the intended recipient. Unauthorized use of this information is prohibited. If you have received this in error, please contact the sender by replying to this message and delete this material from any system it may be on.
***************
</pre></BODY>
</HTML>