登录
首页 >  Golang >  Go问答

利用 Redis 连接 Docker 容器

来源:stackoverflow

时间:2024-03-24 14:18:42 135浏览 收藏

利用 Redis 在 Docker 容器间建立通信。当一个容器向 Redis 数据库添加新数据时,希望触发另一个容器的响应。文章探讨了使用 Redis 发布/订阅机制实现这一目标的可行性,并提供了一个示例代码。但是,当前代码遇到问题,导致第二个容器无法接收发布的消息。文章提出了两个问题:这种通信方式是否可行,以及如何解决当前代码的错误。

问题内容

我有一个 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 容器 2 只是运行然后关闭。

谢谢!


解决方案


docs 开始

receiver.go

package main

import (
    "fmt"

    "github.com/go-redis/redis"
)

func main() {
    c := redis.newclient(&redis.options{
        addr: ":6379",
    })

    pubsub := c.subscribe("mychannel1")

    // wait for confirmation that subscription is created before publishing anything.
    _, err := pubsub.receive()
    if err != nil {
        panic(err)
    }

    // go channel which receives messages.
    ch := pubsub.channel()

    // consume messages.
    for msg := range ch {
        fmt.println(msg.channel, msg.payload)
    }
}

发件人.go

package main

import (
    "time"

    "github.com/go-redis/redis"
)

func main() {
    c := redis.NewClient(&redis.Options{
        Addr: ":6379",
    })

    // Publish a message.
    for range time.Tick(time.Second) {
        err := c.Publish("mychannel1", "hello").Err()
        if err != nil {
            panic(err)
        }
    }
}

好了,本文到此结束,带大家了解了《利用 Redis 连接 Docker 容器》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>