spring-AsyncRestTemplate
2021-01-18 19:27:17 7 举报
AsyncRestTemplate
作者其他创作
大纲/内容
Netty4ClientHttpResponse
7. 预留方法。子类可以利用作为回调处理,实现非阻塞的方式。此处就是调用addCallback添加进来的回调方法,通知调用方。
Netty的方式延续上面的第四步
AbstractAsyncClientHttpRequest
4 executeAsync
5.采用异步处理方式,把restTemplate中的发送请求的逻辑包装在Callable中,提交到异步执行器中SimpleAsyncTaskExecutor
8 addCallBack()
FutureTask
AbstractBufferingAsyncClientHttpRequest
netty处理
构造的时候 把HttpURLConnection和SimpleAsyncTaskExecutor注入进来了
executeInternal
executeAsync
setResultValue
初始化SettableListenableFuture异步返回
doExecute
setAsyncRequestFactory
SimpleBufferingAsyncClientHttpRequest
finishCompletion
SettableListenableFuture
SettableTask<T>
set()setException()get()
3
netty封装的response
AsyncRestTemplate
set
ListenableFutureTask
done()
返回 ListenableFutureTask
6 run()
setExceptionResult
call()
createAsyncRequest
6.真正处理请求的位置。通过FutureTask#run-->回调Callable的call()。call中的逻辑就是第五步中 包装好的网络请求功能。
2.在开始执行的时候,和restTemplate一样初始化AsyncRequestCallback用于设置请求头,初始化ResponseExtractor用于提取响应。此处都是复用restTemplate的内容。采用适配器模式,进行兼容。
setException
setTaskExecutor
AsyncHttpAccessor
set成功
Note:在第一步初始化的时候,如果给异步执行器设置了线程池,在异步执行逻辑execute的时候,就用使用线程池。否则就每次新建一个线程处理。
内部类
1 new
ListenableFuture
addCallback()
2 postForEntity
Future
此处调用还是阻塞的
5 submitListenable
1.初始化的时候,可以构造不同的ClientHttpRequestFactory,默认是SimpleClientHttpRequestFactory 其他有okhttp netty webclient等
Netty4ClientHttpRequest#executeInternal
移除所有等待的线程,并唤醒。
SettableTask
默认SimpleAsyncTaskExecutor
默认SimpleClientHttpRequestFactory
7 done
done
3.不同的RequestFactory返回的AsyncClientHttpRequest不同,此处返回SimpleBufferingAsyncClientHttpRequest。
发起netty通信,并把上一步的Future设置到channel的最后一个pipeline中
成功或失败的回调
处理成功或者失败,都会原子的设置状态
SCH
SimpleAsyncTaskExecutor
FutureTask#setsetException
get()
异步执行execute
8 ,设置回调方法。采用这种方式就是异步非阻塞的方式。调用方也可以直接调用get()方法以异步阻塞的方式获取响应结果
0 条评论
下一页