<div dir="ltr">The easiest way to accomplish what you're trying to do is to run each consumer in its own connection, which is running in its own thread. <div><br></div><div style>So for each consumer you want to start, do the following:</div>
<div style>- Create a new thread</div><div style>- Create a new connection</div><div style>- Declare your queue</div><div style>- Start the consumer</div><div style>- Consume messages</div><div style><br></div><div style>
To deal with canceling the consumer I see two ways to go:</div><div style>- Have the entity that is sending messages to the queue send a "stop message", so that when you receive that message you know to call amqp_basic_cancel() before calling amqp_simple_wait_frame() to start waiting for your next message.</div>
<div style>- Enable Consumer Cancellation notifications (<a href="http://www.rabbitmq.com/consumer-cancel.html">http://www.rabbitmq.com/consumer-cancel.html</a>), then have some other entity delete the queue that the consumer is attached to. Then in your message read loop, when you receive a AMQP_BASIC_CANCEL_METHOD you know to stop reading.</div>
<div style><br></div><div style><br></div><div style>Note that this is likely far from an optimal solution to what your problem is. I probably can give you a better solution if you can describe to me at a high-level what message pattern you're trying to implement (again here are some examples: <a href="http://www.rabbitmq.com/getstarted.html" target="_blank" style="font-size:13px;font-family:arial,sans-serif">http://www.rabbitmq.com/getstarted.html</a>). When I say message pattern I don't mean rabbitmq-c code, I mean a description of how clients and servers in your environment want to talk to each other.</div>
<div style><br></div><div style>-Alan</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jul 1, 2013 at 7:38 PM, 3k4b251 <span dir="ltr"><<a href="mailto:314992959@qq.com" target="_blank">314992959@qq.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">for example. here is a simple receive server code.<br>
<br>
//connection<br>
amqp_connection_state_t conn = amqp_new_connection();<br>
<br>
//socket<br>
amqp_socket_t *socket = amqp_tcp_socket_new();<br>
<br>
//login<br>
amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest",<br>
"guest")<br>
<br>
//open socket<br>
amqp_socket_open(socket, hostname, port)<br>
<br>
//set soket for connection<br>
amqp_set_socket(conn, socket);<br>
<br>
<br>
<br>
<br>
//after link to rabbitmq server. we start to listen to the queue<br>
consumer_1<br>
<br>
<br>
<br>
//open one channel one question: why we need channel....<br>
amqp_channel_open(conn, 1);<br>
<br>
//declare queue "test_1" . I usually try to declare queue before<br>
declare consumer to make sure the queue already be there.<br>
<br>
amqp_queue_declare(conn,1,amqp_cstring_bytes("consumer_1"),0,0,0,1,amqp_empty_table);<br>
<br>
//request consume<br>
amqp_basic_consume(conn, 1, amqp_cstring_bytes("consumer_1"),<br>
amqp_cstring_bytes("consumer_1"), 0, 1, 0, amqp_empty_table);<br>
<br>
// now I will try to receive message<br>
while(1)<br>
{<br>
amqp_frame_t frame;<br>
amqp_simple_wait_frame(conn,&frame);<br>
.........................<br>
........................<br>
...................<br>
}<br>
<br>
//So when the client send message to the queue "consumer_1", I<br>
will receive the message. And if there is no message, it will block at<br>
amqp_simple_wait_frame();<br>
<br>
<br>
//but what I want to do in online server is that one consumer<br>
login,I create a queue "consumer_1" for him, and request queue<br>
listener by amqp_basic_consume(). when the consumer quit, I want to<br>
remove the listener by amqp_basic_cancel(). but I can't do this in<br>
the simple example. I will block in the amqp_simple_wait_frame(). I<br>
could just wait the someone send message to queue "consumer_1"So I try<br>
to start thread for message receving. if I do like this, I share<br>
connection in two threads. I feel very confused .........<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://rabbitmq.1065348.n5.nabble.com/rabbitmq-c-should-I-start-a-thread-for-amqp-simple-wait-frame-to-get-mesage-tp27666p27729.html" target="_blank">http://rabbitmq.1065348.n5.nabble.com/rabbitmq-c-should-I-start-a-thread-for-amqp-simple-wait-frame-to-get-mesage-tp27666p27729.html</a><br>
<div class="HOEnZb"><div class="h5">Sent from the RabbitMQ mailing list archive at Nabble.com.<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>
</div></div></blockquote></div><br></div>