Consumer最后一个发送请求Handler——TransportClientHandler分析
发送请求
Consumer 的Handler处理链最后一个是TransportClientHandler,这个Handler主要是:
1.发起连接
2.请求之前执行HttpClientFilter的beforeSendRequest
3.塞入ServiceComb的微服务调用上下文,设置响应回调处理,发送请求
ServiceComb发送请求使用vertx,而vertx网络发送接收构建在netty之上,因而能够异步高并发。
【Consumer最后一个发送请求Handler——TransportClientHandler分析】java很大一个特点是向建设大楼的脚手架,一个套在一个上面,举例,serviceComb网络发送与接收是:最基础是jdk,上面是netty,然后是vertx,然后是serviceComb。
1.发起连接
文章图片
transport实际上是VertxRestTransport,最终到RestClientInvocation的invoke,这个invoke重点分析,
public void invoke(Invocation invocation, AsyncResponse asyncResp) throws Exception {
...
Future requestFuture = createRequest(ipPort, path);
...
}Future createRequest(IpPort ipPort, String path) {
...
return httpClientWithContext.getHttpClient().request(requestOptions);
...
}public Future request(RequestOptions options) {
ContextInternal ctx = this.vertx.getOrCreateContext();
PromiseInternal promise = ctx.promise();
this.doRequest(options, promise);
return promise.future();
}private void doRequest(HttpMethod method, SocketAddress peerAddress, SocketAddress server, String host, int port, Boolean useSSL, String requestURI, MultiMap headers, long timeout, Boolean followRedirects, ProxyOptions proxyOptions, PromiseInternal requestPromise) {
...
this.httpCM.getConnection(eventLoopContext, key, timeout, (ar1) -> {
...requestPromise.tryComplete(req);
...
}
...
}
httpCM 建立连接成功后,把requestPromise设置Complete,到此连接建立完成。
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 一个人的碎碎念
- 七年之痒之后
- 我从来不做坏事
- 异地恋中,逐渐适应一个人到底意味着什么()
- 迷失的世界(二十七)
- live|live to inspire 一个普通上班族的流水账0723
- 遗憾是生活的常态,但孝顺这件事,我希望每一个人都不留遗憾
- NO.38|NO.38 我不是嫁不出去,而是不想嫁