Yeni golang'lıyım ve tavşanmq başlatma işleminin ana işlevi olan başka bir işlevde olmasını sağlamak için kodumu yeniden düzenlemek istiyorum. Bu yüzden bir struct işaretçisi kullanıyorum (tüm rabbitmq infoslarını içeren initilized) ve bunu gönderme işlevine iletiyorum, fakat şunu söylüyor: Bir ileti yayınlanamadı: Özel durum (504) Neden: "channel/connection açık değil"Golang - RabbitMq: kanal/bağlantı açık değil
yapı:
type RbmqConfig struct {
q amqp.Queue
ch *amqp.Channel
conn *amqp.Connection
rbmqErr error
}
başlatma fonksiyonu:
func initRabbitMq() *RbmqConfig {
config := &RbmqConfig{}
config.conn, config.rbmqErr = amqp.Dial("amqp://guest:[email protected]: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
}
ana:
config := initRabbitMq()
fmt.Println("queue name : ", config.q.Name)
sendMessage(config, <message_to_send>)
gönder iletisi:
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")
Birisi bir fikri varsa, bu çok yardımcı olur. Teşekkürler
Teşekkür ederim, ilk başta bir çeşit yakalama veya nihayet java benzeri olduğunu düşündüm. Dokuyu daha dikkatli okumalıydım .. Teşekkürler! – Xys