有DeferredResult(异步请求)的项目如何做集群
项目中有“/requestA"请求,返回deferredResult,等到请求”/requestB"时再执行deferredResult.setResult(requestB和requestA不是同一用户)。如果做了负载均衡,requestA和requestB可能不在一个机器上,应该要怎么处理。
DeferredResult deferredResult;
@GetMapping("/requestA")
public DeferredResult<String> requestA() {
DeferredResult<String> result = new DeferredResult<();
return result;
}
@GetMapping("/requestB")
public String requestB() {
deferredResult.setResult("success");
return "success";
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
按照你这样的做法,你得必须让同一个用户的请求必须落在同一台机器上才行,负载均衡端使用
ip_hash
规则,这个nginx
还有阿里云的lsb
都可以做到,zuul
网关也可以做到。另外你这种做法肯定是不妥的,
http
是无状态的,你这种方式试图做成有状态,违反了http
协议本身,就算你勉强实现,后续也会带来许多其它问题。用 Redis 的通知或者
blpop
来实现或者干脆轮询数据库。这跟DeferredResult
都不挨着。有DeferredResult(异步请求)的项目如何做集群。我也遇到这个问题了,请问大佬有解决吗