RPC: Thrift
Instalação
- Baixe (a versão utilizada neste roteiro é a 0.16) e compile o thrift
- ou instale-o usando apt-get, por exemplo.
apt-get install thrift-compiler
- execute "thrift" na linha de comando.
- Para thrift com Java, também precisarão dos seguintes arquivos
- slf4j-api-1.7.36
- libthrift-0.16.0.jar
- javax.annotation-api-1.3.2.jar
- coloque-os na pasta
jars
- Baseado no tutorial oficial.
IDL Thrift
- Serviços
1 2 3 4 5
service ChaveValor { void set(1:i32 key, 2:string value), string get(1:i32 key) throws (1:KeyNotFound knf), void delete(1:i32 key) }
- Não se pode retornar NULL!!!
- Exceções
1 2 3 4
exception KeyNotFound { 1:i64 hora, 2:string chaveProcurada="thrifty" }
Exemplo: chavevalor.thrift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Compilação
thrift --gen java chavevalor.thrift
thrift --gen py chavevalor.thrift
ChaveValorHandler.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Arquitetura
- Runtime library -- componentes podem ser selecionados em tempo de execução e implementações podem ser trocadas
- Protocol -- responsável pela serialização dos dados
- TBinaryProtocol
- TJSONProtocol
- TDebugProtocol
- ...
- Transport -- I/O no ``fio''
- TSocket
- TFramedTransport (non-blocking server)
- TFileTransport
- TMemoryTransport
-
Processor -- Conecta protocolos de entrada e saída com o \emph{handler}
-
Handler -- Implementação das operações oferecidas
- Server -- Escuta portas e repassa dados (protocolo) para o processors
- TSimpleServer
- TThreadPool
- TNonBlockingChannel
Execução
1 2 3 |
|
Exercícios - Thrift
- Usando o handler fornecido no threcho acima, implemente o servidor em java
- Implemente o cliente em Java
- Execute servidor e cliente e teste a invocação dos métodos remotos implementados
- [EXTRA] Implemente o cliente em python e execute com o servidor em Java