有DeferredResult(异步请求)的项目如何做集群

发布于 2022-09-12 00:11:12 字数 532 浏览 28 评论 0

项目中有“/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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

紫﹏色ふ单纯 2022-09-19 00:11:12

按照你这样的做法,你得必须让同一个用户的请求必须落在同一台机器上才行,负载均衡端使用 ip_hash 规则,这个 nginx 还有阿里云的 lsb 都可以做到, zuul 网关也可以做到。

另外你这种做法肯定是不妥的,http 是无状态的,你这种方式试图做成有状态,违反了 http 协议本身,就算你勉强实现,后续也会带来许多其它问题。

葵雨 2022-09-19 00:11:12

用 Redis 的通知或者 blpop 来实现或者干脆轮询数据库。这跟 DeferredResult 都不挨着。

墨洒年华 2022-09-19 00:11:12

有DeferredResult(异步请求)的项目如何做集群。我也遇到这个问题了,请问大佬有解决吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文