2014-01-20 3 views
2

Я пытаюсь поэкспериментировать с привязками клиента RabbitMQ Erlang. Я хочу сделать это из оболочки Erlang.Использование rabbitmq-erlang-client из оболочки Erlang?

Я могу успешно загрузить соответствующие модули, и я могу загрузить типы записей:

1> rr(amqp_connection). 
['P_access','P_basic','P_channel'|...] 
2> rl(amqp_params_network). 
-record(amqp_params_network,{username = <<"guest">>, 
          password = <<"guest">>, 
          virtual_host = <<"/">>, 

... и т.д..

, но когда я пытаюсь подключиться на самом деле:

{ok, C} = amqp_connection:start(#amqp_params_network{}). 

... Я получаю ошибку ...

** exception error: no function clause matching 
    erl_eval:expr(amqp_auth_mechanisms,[], 
    {eval,#Fun<shell.21.103280319>}, 
    {value,#Fun<shell.5.103280319>}, 
    none) (erl_eval.erl, line 200) 

Единственное, что я могу думать о том, что amqp_params_network имеет некоторые функции, значения по умолчанию:

... 
ssl_options = none, 
auth_mechanisms = 
[fun amqp_auth_mechanisms:plain/3, 
fun amqp_auth_mechanisms:amqplain/3], 
client_properties = [], 
... 

Как пройти мимо этого, чтобы я мог играть с этим материалом в Erlang оболочки?

ответ

1

Оболочка и записи не всегда хорошо смешиваются. Попробуйте это:

1> rr(amqp_connection). 
['P_access','P_basic','P_channel','P_confirm', 
'P_connection','P_dtx','P_exchange','P_file','P_queue', 
'P_stream','P_test','P_tunnel','P_tx','access.request', 
'access.request_ok',amqp_adapter_info,amqp_error,amqp_msg, 
amqp_params_direct,amqp_params_network,amqqueue,'basic.ack', 
'basic.cancel','basic.cancel_ok','basic.consume', 
'basic.consume_ok','basic.deliver','basic.get', 
'basic.get_empty'|...] 
2> P=#amqp_params_network{auth_mechanisms=[fun amqp_auth_mechanisms:plain/3, fun amqp_auth_mechanisms:amqplain/3]}. 
#amqp_params_network{username = <<"guest">>, 
        password = <<"guest">>,virtual_host = <<"/">>, 
        host = "localhost",port = undefined,channel_max = 0, 
        frame_max = 0,heartbeat = 0,connection_timeout = infinity, 
        ssl_options = none, 
        auth_mechanisms = [#Fun<amqp_auth_mechanisms.plain.3>, 
             #Fun<amqp_auth_mechanisms.amqplain.3>], 
        client_properties = [],socket_options = []} 
3> amqp_connection:start(P). 
{ok,<0.42.0>} 
4> 

Или:

1> rd(params, {username   = <<"guest">>, 
1>        password   = <<"guest">>, 
1>        virtual_host  = <<"/">>, 
1>        host    = "localhost", 
1>        port    = undefined, 
1>        channel_max  = 0, 
1>        frame_max   = 0, 
1>        heartbeat   = 0, 
1>        connection_timeout = infinity, 
1>        ssl_options  = none, 
1>        auth_mechanisms = 
1>         [fun amqp_auth_mechanisms:plain/3, 
1>         fun amqp_auth_mechanisms:amqplain/3], 
1>        client_properties = [], 
1>        socket_options  = []}). 
params 
2> P=#params{}. 
#params{username = <<"guest">>,password = <<"guest">>, 
     virtual_host = <<"/">>,host = "localhost",port = undefined, 
     channel_max = 0,frame_max = 0,heartbeat = 0, 
     connection_timeout = infinity,ssl_options = none, 
     auth_mechanisms = [#Fun<amqp_auth_mechanisms.plain.3>, 
          #Fun<amqp_auth_mechanisms.amqplain.3>], 
     client_properties = [],socket_options = []} 
+0

мне удалось с первым вариантом. –

Смежные вопросы