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 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 