Redis 发布/订阅确认/确认

Ric*_*nop 5 go publish-subscribe redis

Redis Pub/Sub 中有确认的概念吗?

例如,当使用 RabbitMQ 时,我可以让两个工作人员在不同的机器上运行,当我将消息发布到队列时,只有一个工作人员会确认/确认并处理消息。

但是我发现使用 Redis Pub/Sub,两个工作人员都会处理消息。

考虑这个简单的例子,我在两台不同的机器/客户端上运行了这个 go 例程:

go func() {
    for {
        switch n := pubSubClient.Receive().(type) {
        case redis.Message:
            process(n.Data)
        case redis.Subscription:
            if n.Count == 0 {
                return
            }
        case error:
            log.Print(n)
        }
    }
}()
Run Code Online (Sandbox Code Playgroud)

当我发布消息时:

conn.Do("PUBLISH", "tasks", "task A")
Run Code Online (Sandbox Code Playgroud)

两个 go 例程都会接收它并运行 process 函数。

有没有办法实现与 RabbitMQ 类似的行为?例如,第一个确认消息的工作人员将是唯一一个接收并处理它的工作人员。

Dav*_*rth 5

Redis PubSub 更像是一种广播机制。

如果你想要队列,你可以使用BLPOP和RPUSH来获得相同的交互。请记住,RabbitMQ 可以执行 Redis 中不存在的各种其他功能。但如果您正在寻找简单的作业调度/请求处理风格,那么这将很好地工作。