我这有个需求,怎么让一个请求等待延迟任务(如resque,sidekiq等处理)执行完才响应这个请求返回客户端? 场景像发送消息,B 消息比前一条消息 A 先到,但要等待 A 处理完后它才能执行 B,这时返回 B 的响应。
resque
sidekiq
既然是执行完才返回,为什么还要做成后台任务?
场景像发送消息,B 消息比前一条消息 A 先到,但要等待 A 处理完后它才能执行 B,就是延迟执行 B。
我的思路:
当然,更普遍的情况是要么在请求线程内完成,要么丢到队列就不管了。这个请自行斟酌
#2 楼 @schwinn 如果 A 一直不到呢?
这个让我想到了写 ios 时候,等到 A 回来再进行 B. 直接 loading 等待着好了。如果不回来,就处理掉好了
谢谢大家,之前思路有问题。我这也是@hanluner说的 ios 客户端请求。B 正常响应回去告诉客户端我要 A,但任务主体放队列里,等 A 来一起处理,把结果返回。 @Rei 这时客户端知道 A 没到达,会重发 A 请求过来。
#6 楼 @schwinn 实际来说,你无需做得这么细。只要你有一个全局的网络状况控制就可以了。很多用户点击行为你是估算不到的。