Como carregar o cliente econômico em Erlang
Pergunta
Desejo usar o scribe para exportar alguns dados de um aplicativo Erlang, mas tenho um problema ao executar o cliente Thrift.Eu instalo o Thrift, no diretório erlang lib.Estou usando: thrift-0.6.1
Eu encontrei alguns exemplos de código para conectar de erlang via thrift para scribe:
{ok, C} = thrift_client:start_link("localhost", 1463, scribe_thrift,
[{strict_read, false},
{strict_write, false},
{framed, true}]),
mas erlang está retornando este erro:
** exception error: undefined function thrift_client:start_link/4
Quando tento executar application:start(thrift)
, por um momento vejo algum autocompletar de código para thrift*
7> thrift_client:
call/3 close/1 module_info/0 module_info/1 new/2
send_call/3
e não há nenhum método start_link
.
Solução
Acho que hoje em dia você quer algo como thrift_client_util:new(Host, Port, ProtoModule, Options)
que no seu caso seria:
thrift_client_util:new("localhost", 1463, scribe_thrift,
[{strict_read, false},
{strict_write, false},
{framed, true}]).
E um ponto importante a se ter em mente com a API thrift no erlang é que todas as chamadas retornam um novo valor de estado do cliente que você deve usar para chamadas subsequentes.Usar um valor de estado do cliente duas vezes leva a choro e ranger de dentes.
Outras dicas
Eu me integrei ao meu projeto com parcimônia há alguns meses.Existem algumas etapas de inicialização necessárias para obter o cliente.
{ok, TFactory} = thrift_socket_transport:new_transport_factory( "localhost", 8899, []), {ok, PFactory} = thrift_binary_protocol:new_protocol_factory(TFactory, []), {ok, Protocol} = PFactory(), {ok, Client} = thrift_client:new(Protocol, scribe_thrift),
Para obter mais contexto, você provavelmente pode dar uma olhada em um módulo do meu repositório git.