异步处理rest服务 Deferred

先看图

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参数就是最终要返回的信息

至此,浏览器会接收到字符串返回结果。

自己学习总结,有不正确的理解地方还请大神指点。

猜你喜欢

转载自blog.csdn.net/u010681191/article/details/82919784
今日推荐