You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang客户端操作RabbitMQ Streams:创建生产者遇地址缺失错误

RabbitMQ Stream Go客户端创建生产者失败:dial tcp: missing address 问题排查

问题场景

我通过以下Docker Compose配置了启用rabbitmq_stream及rabbitmq_stream_management插件的RabbitMQ服务:

rabbitmq:
    image: rabbitmq:3-management
    container_name: "vibe-rabbitmq"
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"
      - "5552:5552"
    environment:
      - RABBITMQ_PLUGINS=rabbitmq_stream,rabbitmq_stream_management
      - RABBITMQ_DEFAULT_USER=rabbitmq
      - RABBITMQ_DEFAULT_PASS=rabbitmq

并编写了对应的Golang代码:

package main

import (
    "fmt"
    "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/amqp"
    "github.com/rabbitmq/rabbitmq-stream-go-client/pkg/stream"
    "log"
    "time"
)

func main() {

    streamName := "your_stream_name"

    env, err := stream.NewEnvironment(
        stream.NewEnvironmentOptions().
            SetHost("0.0.0.0").
            SetPort(5552). // 5552
            SetUser("rabbitmq").
            SetPassword("rabbitmq"),
    )

    if err != nil {
        log.Fatalf("Failed to create environment: %s", err)
    }

    err = env.DeclareStream(streamName, &stream.StreamOptions{})

    if err != nil {
        log.Fatalf("Failed to declare stream: %v", err)
    }

    log.Printf("Stream '%s' created successfully", streamName)

    producer, err := env.NewProducer(streamName, &stream.ProducerOptions{})
    if err != nil {
        log.Fatalf("Failed to create producer: %s", err)
    }

}

运行代码后,成功创建了Stream,但创建Producer时出现如下错误:

2023/12/14 18:15:17 Stream 'your_stream_name' created successfully
2023/12/14 18:15:17 Failed to create producer: dial tcp: missing address
exit status 1

疑惑点:为何能通过env实例创建流,却无法创建生产者?


问题原因

DeclareStream操作依赖RabbitMQ管理插件的HTTP API(端口15672),该操作即使Host设为0.0.0.0,也能通过内部逻辑 fallback 到本地地址完成请求;但创建Producer需要直接建立TCP连接到RabbitMQ Stream的专属端口5552,此时0.0.0.0作为服务端监听所有网卡的标识,无法被客户端用来发起连接——它不是一个可被访问的目标地址。

解决方案

修改代码中EnvironmentOptions的Host配置,将0.0.0.0替换为localhost(本地开发环境下):

env, err := stream.NewEnvironment(
    stream.NewEnvironmentOptions().
        SetHost("localhost"). // 替换为localhost
        SetPort(5552).
        SetUser("rabbitmq").
        SetPassword("rabbitmq"),
)

如果代码在容器网络内运行,也可以直接使用RabbitMQ容器的名称vibe-rabbitmq作为Host值。


内容的提问来源于stack exchange,提问作者Alexander Mills

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:17:41