[rabbitmq-discuss] pub-sub erlang problem

Alexis Richardson alexis.richardson at cohesiveft.com
Tue Apr 8 21:50:32 BST 2008


Joe

To add to Ben's comment:  If you are new to erlang you may wish to use
the Java client.  There are quite a few documented examples for that,
or you can try the .NET client docs.

Please keep the questions coming!

Best wishes

alexis



On Tue, Apr 8, 2008 at 1:00 PM, Ben Hood <0x6e6562 at gmail.com> wrote:
> Joe,
>
>  Sorry about the delay in answering your question.
>
>  It looks like you're trying to publish to an exchange that doesn't
>  exist, although the server diagnostic could be a little clearer on
>  this point.
>
>  To fix your test, precede the exchange declare command before the
>  publish command, i.e. put this code before the publish call:
>
>  ExchangeDeclare = #'exchange.declare'{ticket = Ticket, exchange = X,
>  type = <<"topic">>,
>                                            passive = false, durable =
>  false, auto_delete = false, internal = false,
>                                            nowait = false, arguments =
>  []},
>  #'exchange.declare_ok'{} = amqp_channel:call(Channel, ExchangeDeclare)
>
>  We should probably take on board better server diagnostics as an
>  improvement item.
>
>  HTH,
>
>  Ben
>
>
>
>  On 6 Apr 2008, at 22:53, Joe Lee wrote:
>
>  > I am trying to get pub-sub model to work in rabbitmq.  My
>  > understanding is that you still have to perform
>  > amqp_connection:start, amqp_connection:open_channel,
>  > amqp_channel:call(Channel, Access), channel close and connection
>  > close on each async call.
>  > I am not sure what payload_fragments_rev = [Payload] is for.  I have
>  > searched through amqp xml specs and pdf.  Maybe I am not hitting the
>  > right keywords.  For pub-sub model, how do you assign the message,
>  > assign it to Payload variable?
>  >
>  > I am new to erlang.  This shouldn't be a show stopper.  I just need
>  > to get this working.  I am getting following error:
>  >
>  > (rabbit at home)1> amqp_async:amqp_lifecycle().
>  > Connection: {<0.217.0>,direct}
>  >
>  > =ERROR REPORT==== 6-Apr-2008::16:33:51 ===
>  > Lax ticket check mode: ignoring cross-realm access for ticket 101
>  > ** exception exit: {{amqp,not_found,'basic.publish'},
>  >                     {gen_server,call,
>  >                         [<0.218.0>,
>  >                          {call,{'channel.close',200,<<"Goodbye">>,
>  > 0,0}}]}}
>  >      in function  gen_server:call/2
>  >      in call from amqp_async:amqp_lifecycle/0
>  >
>  > my pub-sub code:
>  >
>  > -module(amqp_async).
>  >
>  > -include_lib("rabbitmq_server/include/rabbit_framing.hrl").
>  > -include_lib("rabbitmq_server/include/rabbit.hrl").
>  >
>  > -export([amqp_lifecycle/0]).
>  >
>  > amqp_lifecycle() ->
>  >     User = Password = "guest",
>  >     Realm = <<"/data">>,
>  >
>  >     %% Start a connection to the server
>  >
>  >     Connection = amqp_connection:start(User, Password),
>  >     io:format("Connection: ~p~n",[Connection]),
>  >     %% Once you have a connection to the server, you can start an
>  > AMQP channel gain access to a realm
>  >
>  >     Channel = amqp_connection:open_channel(Connection),
>  >     Access = #'access.request'{realm = Realm,
>  >                                exclusive = false,
>  >                                passive = true,
>  >                                active = true,
>  >                                write = true,
>  >                                read = true},
>  >     #'access.request_ok'{ticket = Ticket} =
>  > amqp_channel:call(Channel, Access),
>  >
>  >     X = <<"x">>,
>  >     RoutingKey = <<"a.b.c.*">>,
>  >     Payload = <<"foobar">>,
>  >     BasicPublish = #'basic.publish'{ticket = Ticket,
>  >                                     exchange = X,
>  >                                     routing_key = RoutingKey,
>  >                                     mandatory = false,
>  >                                     immediate = false},
>  >     Content = #content{class_id = 60,
>  >          properties = amqp_util:basic_properties(),
>  >          properties_bin = none,
>  >          payload_fragments_rev = [Payload]
>  >         },
>  >     amqp_channel:cast(Channel, BasicPublish, Content),
>  >
>  >     %% After you've finished with the channel and connection you
>  > should close them down
>  >
>  >     ChannelClose = #'channel.close'{reply_code = 200, reply_text =
>  > <<"Goodbye">>,
>  >                                     class_id = 0, method_id = 0},
>  >     #'channel.close_ok'{} = amqp_channel:call(Channel, ChannelClose),
>  >     ConnectionClose = #'connection.close'{reply_code = 200,
>  > reply_text = <<"Goodbye">>,
>  >                                           class_id = 0, method_id =
>  > 0},
>  >     #'connection.close_ok'{} = amqp_connection:close(Connection,
>  > ConnectionClose),
>  >     ok.
>  >
>  > Thank you,
>  > Joe
>  >
>  >
>  >
>  >
>  > _______________________________________________
>  > rabbitmq-discuss mailing list
>  > rabbitmq-discuss at lists.rabbitmq.com
>  > http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>
>
>  _______________________________________________
>  rabbitmq-discuss mailing list
>  rabbitmq-discuss at lists.rabbitmq.com
>  http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>



-- 
Alexis Richardson
+44 20 7617 7339 (UK)
+44 77 9865 2911 (cell)
+1 650 206 2517 (US)




More information about the rabbitmq-discuss mailing list