异步处理rest服务 Deferred

本文阐述了HTTP请求异步处理流程,通过DeferredResult实现线程间通信,确保正确响应客户端。线程1接收请求并生成订单,线程2处理订单后,利用DeferredResult返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看图

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值