gpt4 book ai didi

go - Redis 发布/订阅 Ack/Nack

转载 作者:IT王子 更新时间:2023-10-29 00:40:28 26 4
gpt4 key购买 nike

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

例如,当使用 RabbitMQ 时,我可以让两个 worker 在不同的机器上运行,当我向队列发布一条消息时,只有一个 worker 会 ack/nack 它并处理消息。

但是我发现使用 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)
}
}
}()

当我发布消息时:

conn.Do("PUBLISH", "tasks", "task A")

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

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

最佳答案

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

如果你想要队列,你可以使用BLPOP连同 RPUSH获得相同的互动。请记住,RabbitMQ 可以执行 Redis 中不存在的各种其他操作。但是,如果您正在寻找简单的作业调度/请求处理方式,这会很好。

关于go - Redis 发布/订阅 Ack/Nack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32037803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com