<div dir="ltr">Cool.<div><br></div><div style>Like a few replies have said now, handle_info in the gen_server callback module is where you can handle those.</div><div style><br></div><div style>If all you need is to handle messages from rabbitmq, you could get away with a plain process, perhaps being supervised.</div>
<div style><br></div><div style>In the long run it's worth the added benefits of proc_lib as Garret suggested, which you get for free in gen_server, but gen_server adds the call and cast options. If you don't need gen_server call and cast, it's worth looking into "OTP-compliant special processes" <a href="http://www.erlang.org/doc/design_principles/spec_proc.html">http://www.erlang.org/doc/design_principles/spec_proc.html</a> - often you don't need a gen_server, or forging a gen_server into what you want isn't the cleanest solution.</div>
<div style><br></div><div style>The easiest way to get started with something good enough, though, is gen_server :)</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 17 April 2013 19:57, Lee Sylvester <span dir="ltr"><<a href="mailto:lee.sylvester@gmail.com" target="_blank">lee.sylvester@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">It's checking for messages from RabbitMQ.<div><br></div><div>Cheers,</div><div>Lee</div>
<div><div class="h5"><div><br></div><div><br></div><div><div><div>On 17 Apr 2013, at 18:47, JD Bothma <<a href="mailto:jbothma@gmail.com" target="_blank">jbothma@gmail.com</a>> wrote:</div><br><blockquote type="cite">
<div dir="ltr">Can I ask what your never-exiting loop is doing?<div><br></div><div>what is the purpose of the gen_server if the process will forever loop in loop and not deal with gen_server messages?</div></div><div class="gmail_extra">

<br><br><div class="gmail_quote">On 17 April 2013 19:33, Lee Sylvester <span dir="ltr"><<a href="mailto:lee.sylvester@gmail.com" target="_blank">lee.sylvester@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hey guys,<br>
<br>
So, I've hit a "best practice" conundrum in OTP; I have a server utilising gen_server for a RabbitMQ consumer.  In the init of that gen_server, I'm setting up a RabbitMQ connection, but I also need to start a loop.  My guess was that I shouldn't call this before init exits, as I was passing the Connection and Channel objects to state for handling elsewhere.  If I handle the loop in init, surely it will never return?<br>


<br>
To simplify what I'm saying (as I'm confusing myself here), here's my code:<br>
<br>
init([]) -><br>
    {ok, Connection} = amqp_connection:start(#amqp_params_network{ host="localhost" }),<br>
    {ok, Channel} = amqp_connection:open_channel(Connection),<br>
    amqp_channel:call(Channel, #'exchange.declare'{exchange = <<"user_msgs">>,<br>
                                                   type = <<"direct">>}),<br>
    #'queue.declare_ok'{queue = Queue} =<br>
        amqp_channel:call(Channel, #'queue.declare'{exclusive = true}),<br>
    State = {Channel, Connection},<br>
    amqp_channel:call(Channel, #'queue.bind'{exchange = <<"user_msgs">>,<br>
                                              routing_key = term_to_binary(node(self())),<br>
                                              queue = Queue}),<br>
    amqp_channel:subscribe(Channel, #'basic.consume'{queue = Queue,<br>
        no_ack = true}, self()),<br>
    receive<br>
        #'basic.consume_ok'{} -> ok<br>
    end,<br>
    loop(Channel),<br>
    {ok, State}.<br>
<br>
Now, if I don't put the loop in my init, then how can I be sure that the loop is called every time the gen_server restarts?  Can someone please suggest the "right" way to call the loop in my gen_server?<br>


<br>
Thanks loads,<br>
Lee<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div>
</blockquote></div><br></div></div></div></div></blockquote></div><br></div>