@Override public void onException(Throwable throwable) { callback.onException(throwable); endTime = System.currentTimeMillis(); destroy(); }
@Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { RequestContext context = ctx.channel().attr(client.requestKey).getAndSet(null); try { if (context != null && context.tryDone()) { context.onException(cause); } } finally { client.pool.tryRelease(ctx.channel()); } LOGGER.error("http client caught an ex, info={}", context, cause); }
private void writeRequest(Channel channel, RequestContext context) { channel.attr(requestKey).set(context); pool.attachHost(context.host, channel); channel.writeAndFlush(context.request).addListener((ChannelFutureListener) future -> { if (!future.isSuccess()) { RequestContext info = future.channel().attr(requestKey).getAndSet(null); info.tryDone(); info.onFailure(503, "Service Unavailable"); LOGGER.debug("request failure request={}", info); pool.tryRelease(future.channel()); } }); }
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { RequestContext context = ctx.channel().attr(client.requestKey).getAndSet(null); try { if (context != null && context.tryDone()) { LOGGER.debug("receive server response, request={}, response={}", context, msg); HttpResponse response = (HttpResponse) msg; if (isRedirect(response)) { if (context.onRedirect(response)) { String location = getRedirectLocation(context.request, response); if (location != null && location.length() > 0) { context.cancelled.set(false); context.request.setUri(location); client.request(context); return; } } } context.onResponse(response); } else { LOGGER.warn("receive server response but timeout, request={}, response={}", context, msg); } } finally { client.pool.tryRelease(ctx.channel()); ReferenceCountUtil.release(msg); } }
httpClient.request(new RequestContext(request, new DefaultHttpCallback(message))); } catch (Exception e) { HttpResponseMessage
public RequestContext(FullHttpRequest request, HttpCallback callback) { this.callback = callback; this.request = request; this.uri = request.uri(); this.readTimeout = parseTimeout(); }
@Override public void run(Timeout timeout) throws Exception { if (tryDone()) { if (callback != null) { callback.onTimeout(); } } }
httpClient.request(new RequestContext(request, new DefaultHttpCallback(message))); } catch (Exception e) { HttpResponseMessage
@Override public void onResponse(HttpResponse response) { callback.onResponse(response); endTime = System.currentTimeMillis(); destroy(); }
@Override public void onFailure(int statusCode, String reasonPhrase) { callback.onFailure(statusCode, reasonPhrase); endTime = System.currentTimeMillis(); destroy(); }
@Override public void onTimeout() { callback.onTimeout(); endTime = System.currentTimeMillis(); destroy(); }