我是 golang 的新手,我想重構我的代碼,以便rabbitmq 初始化在另一個 main 函數(shù)中。所以我使用了一個結(jié)構指針(包含所有初始化的 rabbitmq 信息)并將其傳遞給發(fā)送函數(shù),但它告訴我:無法發(fā)布消息:異常(504)原因:“通道/連接未打開”結(jié)構:type RbmqConfig struct { q amqp.Queue ch *amqp.Channel conn *amqp.Connection rbmqErr error}初始化函數(shù):func initRabbitMq() *RbmqConfig { config := &RbmqConfig{} config.conn, config.rbmqErr = amqp.Dial("amqp://guest:guest@localhost:5672/") failOnError(config.rbmqErr, "Failed to connect to RabbitMQ") defer config.conn.Close() config.ch, config.rbmqErr = config.conn.Channel() failOnError(config.rbmqErr, "Failed to open a channel") defer config.ch.Close() config.q, config.rbmqErr = config.ch.QueueDeclare( "<my_queue_name>", true, // durable false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) failOnError(config.rbmqErr, "Failed to declare a queue") return config}主要的 :config := initRabbitMq()fmt.Println("queue name : ", config.q.Name)sendMessage(config, <message_to_send>)在發(fā)送消息中:func sendMessage(config *RbmqConfig, <message_to_send>) { config.rbmqErr = config.ch.Publish( "", // exchange config.q.Name, // routing key false, // mandatory false, amqp.Publishing{ DeliveryMode: amqp.Persistent, ContentType: "text/plain", Body: []byte(<message_to_send>), }) failOnError(config.rbmqErr, "Failed to publish a message")如果有人有任何想法,那將非常有幫助。先感謝您
1 回答

蝴蝶刀刀
TA貢獻1801條經(jīng)驗 獲得超8個贊
在 your 中init
,您編寫了defer config.conn.Close()
,它將在函數(shù)返回時執(zhí)行。也就是說,無論何時init
完成,您的連接都會關閉,從而導致未打開的連接。
您需要推遲連接在 main 中關閉,或者在您希望它關閉的地方延遲。
- 1 回答
- 0 關注
- 542 瀏覽
添加回答
舉報
0/150
提交
取消