在执行异步处理时持有http请求的java
我们有一个API,它作为一个外观,封装了对内部服务的调用。我们计划改变外观和内部服务之间的交互,因为我们正在修改内部服务以使用队列,使其更具弹性和弹性。我们现在不能改变客户端使用API的方式,这就是为什么我们希望保持客户端和外观之间的阻塞调用
该服务将公开一个web方法来接收请求,将消息发布到队列,并尽快将调用返回到façade。处理完成后,服务将调用façade的内部web方法,释放第一个调用(façade的客户端)
立面使用Spring Boot和MVC构建。问题是:我们如何“保持”客户机的http请求,等待来自服务的信号将数据返回给客户机?我们考虑了以下方法:
- 第一次调用API时,它会生成一个唯一标识符并将其发送给内部服务。然后,façade中的web方法将轮询(检查并睡眠)一个单例对象(可能是ConcurrentHashMap),以查找与唯一标识符关联的对象。当内部服务向façade发出信号时,它将结果放入singleton对象中,这样web方法就可以将信息返回给客户端李>
- 使用上述Akka参与者的类似方法
我们担心这个解决方案的可伸缩性和可用性(我们知道保留客户机http请求并不好,但我们必须接受一段时间)
这里有人做过类似的事情吗?采用了什么方法?是否有一些框架(Java)可以使用
# 1 楼答案
许多技术可以用来解决您的问题,比如spring mvc和spring webflux
https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-async