项目中有“/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";
按照你这样的做法,你得必须让同一个用户的请求必须落在同一台机器上才行,负载均衡端使用
ip_hash
规则,这个nginx
还有阿里云的lsb
都可以做到,zuul
网关也可以做到。另外你这种做法肯定是不妥的,
http
是无状态的,你这种方式试图做成有状态,违反了http
协议本身,就算你勉强实现,后续也会带来许多其它问题。