【发布时间】:2019-06-09 16:09:26
【问题描述】:
我有一个包含多个容器的 docker-compose 文件,其中两个应该通过 Redis DB 进行通信。两个容器都与 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 只是运行然后关闭。
谢谢!
【问题讨论】:
-
您需要订阅频道
redisdb.Subscribe(key) -
密钥实际上是一个唯一的 ID,每次添加到队列中都是不同的。如果 UID 每次都相同,这仍然有效吗?
-
我明白了,你想发布设置了key=value的信息,我只写了“key”,因为它是发布的第一个参数。您可能正在寻找这样的东西:
jobsQueue.Publish("myKeySetInfoChannel", key + " was set to " + value)=>redisDb.Subscribe("myKeySetInfoChannel") -
谢谢!我得到了它的工作。