gpt4 book ai didi

docker - 使用 Redis 作为 Docker 容器之间的链接

转载 作者:可可西里 更新时间:2023-11-01 11:46:06 25 4
gpt4 key购买 nike

我有一个包含多个容器的 docker-compose 文件,其中两个应该通过 Redis 数据库进行通信。两个容器都与 Reids 有连接,我可以从两者读取/写入。但是,我希望每次从另一个容器添加东西时都会触发一个容器。我以为我可以通过 Redis Sub/Pub 来完成这个,但是当我运行代码时它永远不会触发任何东西,即使我看到我已经将新项目添加到 Redis 队列中也是如此。

由此我有两个问题:1. 我想做的事情有可能吗?我可以在两个单独的 docker 容器中发布/订阅并期望它像上面描述的那样工作吗?2. 如果可能的话,有人可以指出我在使用此工具时出错的地方吗?

这是我的功能,我将新数据添加到 Redis 队列,然后将数据发布到 Docker 容器 1。

func redisShare(key string, value string) {
jobsQueue.Set(key, value, 0) //setting in the queue
jobsQueue.Publish(key, value) //publishing for the other docker container to notice
fmt.Println("added ", key, "with a value of ", value, "to the redis queue")
}

我在我的另一个 docker 容器中使用这一行来订阅 Redis 队列并监听变化: redisdb.Subscribe()

我希望如果将某些内容添加到 redis 队列,它会将数据共享到另一个容器,并且我会看到收到的消息,但现在 Docker Container 2 只是运行然后关闭。

谢谢!

最佳答案

以防万一其他人对答案感到疑惑:我最终结合使用了 Aleksandrs 和 sui 的答案。在我的第一个 Docker 容器中,我将结果发布到特定 channel :

publishData := redisdb.Subscribe("CHANNELNAME")

然后在我订阅 channel 的第二个 Docker 容器中,感谢 sui 在这部分的帮助,我订阅了 channel 并提取了 UID 和 IP 信息,如下所示:

ch := pubsub.Channel()
for msg := range ch {
fmt.Println(msg.Payload)
s := strings.Split(msg.Payload, ":")
UID, IP := s[0], s[1]
fmt.Println(UID, IP)
}

到目前为止,这对我来说效果很好 - 非常感谢 sui 和 Aleksandrs 的帮助!

关于docker - 使用 Redis 作为 Docker 容器之间的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54202384/

25 4 0
文章推荐: java - 如何使用 Spring Boot 在 Redis 中存储 List 类型的值?