1

我正在使用 redis 实现 RPC 机制。

服务器连接到 redis 并监听请求BLPOP job:queue 0,客户端连接并添加请求RPUSH job:queue [$job_id, ...]。然后客户端等待结果BLPOP job:done:$job_id 0,服务器将结果推送到该队列中供客户端使用。

如果在作业服务期间,例如,一旦服务器调用BLPOP并获取了作业详细信息,服务器就死了,客户端将永远等待响应,但它永远不会到达。

有没有办法在 Redis 中检测到这种情况,例如在服务器接受作业后,崩溃,连接关闭(例如 tcp 套接字被操作系统关闭)。Redis 是否可以发出客户端已断开连接的信号,我们是否可以使用它来检测作业已被接受但永远不会完成?或者,除了队列之外,redis 中是否有更好的 RPC 机制?

4

1 回答 1

1

你通常做的实际上是让你的弹出客户端BRPOPLPUSH从原始列表到一个特殊的“我正在处理这个列表”。您可以定期让另一个进程扫描特殊列表以检测“丢失”的作业并将它们返回到队列(或您希望实施的任何其他策略)。

于 2018-05-01T14:07:12.550 回答