先看图
1,当http发出请求时,线程1接收到请求,向消息队列发送处理订单消息
2,应用2监听到了处理订单请求,对订单进行处理
3,应用2处理完毕后向消息队列发送订单处理完毕消息
4,线程2监听到订单处理完毕消息,返回给浏览器
整体流程就是这样,但是会发先一个问题,就是线程2 如何正确的返回给请求线程1的http请求。
这里就用到了Deferred
使用方法是 线程1 new一个DeferredResult ,线程2用线程1生成的DeferredResult把结果返回。
具体代码
声明一个单例DeferredResultHolder,其中包含一个map ,key为订单唯一id,value为DeferredResult
然后在线程一中先new一个DeferredResult代码:
DeferredResult<String> result = new DeferredResult<>();
String代表最终返回给浏览器的数据类型
然后调用DeferredResultHolder.getMap.put('订单唯一id',result);
线程1中的主要代码结束。
在线程2中,调用DeferredResultHolder.getMap.get('订单唯一id').setResult("返回浏览器的字符串内容");
//setResult意味着整个异步处理完成了要往浏览器去返回结果了 //setResult参数就是最终要返回的信息
至此,浏览器会接收到字符串返回结果。
自己学习总结,有不正确的理解地方还请大神指点。