我尝试使用Go的streadway/amqp驱动程序连接到RabbitMQ总线。我正在处理重新连接例程,为此,我有一个rabbitMQConsume
函数调用rabbitMQConnect
函数。
func rabbitMQConnect(cfg objects.GlobalConfig) (*amqp.Connection, *amqp.Channel, error) {
rabbitConfig := amqp.Config{
Vhost: cfg.RabbitVHost,
Heartbeat: 5,
}
//Open connection to Rabbit
url := fmt.Sprintf("amqp://" + cfg.RabbitUser + ":" + cfg.RabbitPassword + "@" + cfg.RabbitHost + ":" + cfg.RabbitPort + cfg.RabbitVHost)
conn, err := amqp.DialConfig(url, rabbitConfig)
if err == nil {
return nil, nil, err
}
ch, err := conn.Channel()
if err != nil {
return nil, nil, err
}
// Create Exchange if it doesn't exist
err = ch.ExchangeDeclare(
"ali", // name
"direct", // type
true, // durable
false, // auto-deleted
false, // internal
false, // no-wait
nil, // arguments
)
if err != nil {
return nil, nil, err
}
//Declare queue
_, err = ch.QueueDeclare(
cfg.RabbitQueue, // name
true, // durable
false, // delete when usused
false, // exclusive
false, // no-wait
nil, // arguments
)
if err != nil {
return nil, nil, err
}
//Bind queue
err = ch.QueueBind(
cfg.RabbitQueue, // queue name
cfg.RabbitKey, // routing key
cfg.RabbitExchange, // exchange
false,
nil,
)
if err != nil {
return nil, nil, err
}
return conn, ch, nil
}
//RabbitMQConsume setup the channel/exchange data
func rabbitMQConsume(cfg objects.GlobalConfig) (*amqp.Connection, <-chan amqp.Delivery, error) {
conn, ch, err := rabbitMQConnect(cfg)
if err != nil {
return nil, nil, err
}
consumerID, err := helper.GetConsumerID()
if err != nil {
return nil, nil, err
}
//Start receiving data in the msgs channel
msgs, err := ch.Consume(
cfg.RabbitQueue, // queue
consumerID, // consumer
false, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
if err != nil {
return nil, nil, err
}
return conn, msgs, nil
}
我遇到的问题是ch
和conn
从[{1}}返回rabbitMQConsume
时的价值是{{当我运行rabbitMQconnect
行时,程序会出现恐慌。
我基于this example失去了这个基础
有任何想法吗?谢谢!
答案 0 :(得分:1)
在amqp.DialConfig
之后,您的错误检查中有错字!
将err == nil
更改为err != nil
conn, err := amqp.DialConfig(url, rabbitConfig)
if err != nil { // you typed it as err == nil
return nil, nil, err
}