连接到docker容器内的rabbitmq时出现问题

问题描述 投票:0回答:1

我正在编写一个简单的应用程序来测试与rabbitmq的使用。这是代码:

package main

import (
    "log"
    "time"

    "github.com/streadway/amqp"
)

func failOnError(err error, msg string) {
    if err != nil {
        log.Printf("%s: %s", msg, err)
    }
}

func main() {
    var conn *amqp.Connection
    var err error

    for i := 0; i < 5; i++ {
        conn, err = amqp.Dial("amqp://dev:test@rabbitmq:5672/")
        if err != nil {
            continue
        }
        log.Println(err)
        time.Sleep(5 * time.Second)
    }

    if err != nil {
        log.Printf("Failed to connect to RabbitMQ: %v", err)
    }

    ch, err := conn.Channel()
    failOnError(err, "Failed to open a channel")
    defer ch.Close()

    q, err := ch.QueueDeclare(
        "hello", // name
        false,   // durable
        false,   // delete when unused
        false,   // exclusive
        false,   // no-wait
        nil,     // arguments
    )
    failOnError(err, "Failed to declare a queue")

    body := "Hello World!"
    err = ch.Publish(
        "",     // exchange
        q.Name, // routing key
        false,  // mandatory
        false,  // immediate
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte(body),
        })
    log.Printf(" [x] Sent %s", body)
    failOnError(err, "Failed to publish a message")

    msgs, err := ch.Consume(
        q.Name, // queue
        "",     // consumer
        true,   // auto-ack
        false,  // exclusive
        false,  // no-local
        false,  // no-wait
        nil,    // args
    )
    failOnError(err, "Failed to register a consumer")

    forever := make(chan bool)

    go func() {
        for d := range msgs {
            log.Printf("Received a message: %s", d.Body)
        }
    }()

    log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
    <-forever
}

问题是rabbitmq服务似乎启动并工作正常。我也可以进入管理插件Web应用程序。但我的应用程序总是给我这个错误:

024/01/22 13:16:33 Failed to connect to RabbitMQ: dial tcp 127.0.0.1:5672: connect: connection refused

这显然意味着我无法连接到 RabbitMQ。 这是 DockerFile:

FROM golang:latest

LABEL maintainer="Anatoliy"

WORKDIR /app

COPY go.mod go.sum ./

RUN go mod download

COPY . .

RUN go build -o main .

EXPOSE 8080

CMD ["./main"]

这是 docker-compose.yml:

version: '3.9'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      rabbitmq:
        condition: service_healthy
  rabbitmq:
    image: "rabbitmq:3-management"
    hostname: "rabbit"
    environment:
      RABBITMQ_DEFAULT_USER: dev
      RABBITMQ_DEFAULT_PASS: test
    ports:
      - "5672:5672"
      - "15672:15672"
    healthcheck:
      test: ["CMD", "rabbitmqctl", "status"]
      interval: 30s
      timeout: 10s
      retries: 5

此外,我刚刚在 docker 中仅启动了rabbitmq,并且我能够连接到rabbitmq,使用以下连接线在docker之外启动我的应用程序:

conn, err = amqp.Dial("amqp://dev:[email protected]:5672/")
使用此连接线应用程序可以正常工作。我不明白如何设置我的应用程序以在 docker 内正常工作。

docker go rabbitmq
1个回答
0
投票

提供的列表工作正常(没有任何更改),因此您的环境可能存在某种问题。

docker-compose中提到的Rabbitmq无法启动,因为你的docker或主机上有另一个rabbitmq。要停止所有正在运行的容器,请执行以下操作

docker stop $(docker ps -aq)
。另外,您应该检查主机上是否有兔子。或者,您可以删除端口暴露的部分(从撰写文件中删除此行
- "5672:5672"
,
- "15672:15672"
)。

© www.soinside.com 2019 - 2024. All rights reserved.