Visão geral
Last updated
Was this helpful?
Last updated
Was this helpful?
O java-restify
oferece suporte para requisições assíncronas de maneira bastante simples.
Um detalhe de implementação importante é que o java-restify
diferencia a execução assíncrona do método da execução assíncrona da requisição.
Conforme comentado na , alguns tipos, como Future
, CompletableFuture
, irão automaticamente forçar que o método seja executado em uma thread
diferente.
Outro tipo que pode ser utilizado como retorno do método é o AsyncEndpointCall
, um objeto fornecido pelo java-restify
que representa a execução assíncrona de uma requisição.
Outra abordagem é, ao invés de lidar com o retorno do método, é utilizar argumentos de callback
, usando a anotação @CallbackParameter
:
Ao utilizar parâmetros anotados com @CallbackParameter
, o retorno do método deve ser void
.
Se a configuração padrão não atender as necessidades da sua aplicação, o Executor
pode ser facilmente customizado:
Os exemplos acima demonstram o suporte do java-restify
para execução assíncrona de métodos, usando o tipo de retorno ou argumentos de callback
. Nesse cenário, o java-restify
irá apenas executar em outra thread
os mesmos passos de qualquer chamada de método. O ponto a ser observado aqui é que a requisição HTTP continua a ser uma operação bloqueante, mas sendo realizada em uma thread
separada.
Se o java-restify
estiver configurado para utilizar um cliente HTTP assíncrono, então os recursos específicos da implementação serão utilizados; se não for o caso (como é o padrão), a execução do método (incluindo a requisição HTTP) apenas será feita em uma thread
separada (conforme detalhado acima).
Os handlers
responsáveis pela execução de métodos assíncronos utilizam o mesmo thread pool
configurado para requisições assíncronas. Por padrão, é utilizad um Executor
criado a partir do método ).
Isso é útil, mas eventualmente pode ser importante utilizarmos os recursos assíncronos do próprio client
HTTP, como por exemplo I/O não-bloqueante ou algum suporte especializado fornecido pela própria biblioteca. O java-restify
também oferece uma API específica para clientes HTTP assíncronos. Os detalhes são explicados mais profundamente na .