我想測試與rabbitmq服務器的重啟連接。在寫了小腳本來測試。 http://play.golang.org/p/l3ZWzG0Qqb 但它不起作用。在步驟 10 中,我關閉了通道和連接。并再次打開它們。并重新創建 chan amqp.Confirmation ( :75) 。并繼續循環。但在那之后,從陳確認沒有任何回報。UPD:代碼在這里。package mainimport ( "fmt" "github.com/streadway/amqp" "log" "os" "time")const SERVER = "amqp://user:pass@localhost:5672/"const EXCHANGE_NAME = "publisher.test.1"const EXCHANGE_TYPE = "direct"const ROUTING_KEY = "publisher.test"var Connection *amqp.Connectionvar Channel *amqp.Channelfunc setup(url string) (*amqp.Connection, *amqp.Channel, error) { conn, err := amqp.Dial(url) if err != nil { return nil, nil, err } ch, err := conn.Channel() if err != nil { return nil, nil, err } return conn, ch, nil}func main() { url := SERVER Connection, Channel, err := setup(url) if err != nil { fmt.Println("err publisher setup:", err) return } confirms := Channel.NotifyPublish(make(chan amqp.Confirmation, 1)) if err := Channel.Confirm(false); err != nil { log.Fatalf("confirm.select destination: %s", err) } for i := 1; i <= 3000000; i++ { log.Println(i) if err != nil { fmt.Println("err consume:", err) return } if err := Channel.Publish(EXCHANGE_NAME, ROUTING_KEY, false, false, amqp.Publishing{ Body: []byte(fmt.Sprintf("%d", i)), }); err != nil { fmt.Println("err publish:", err) log.Printf("%+v", err) os.Exit(1) return } // only ack the source delivery when the destination acks the publishing confirmed := <-confirms if confirmed.Ack { log.Printf("confirmed delivery with delivery tag: %d", confirmed.DeliveryTag) } else { log.Printf("failed delivery of delivery tag: %d", confirmed.DeliveryTag) // TODO. Reconnect will be here }
1 回答

翻過高山走不出你
TA貢獻1875條經驗 獲得超3個贊
您應該將頻道置于確認模式。通過調用channel.Confirm()方法。關閉連接后,即使在同一連接上獲得新頻道后,您應該再次調用 Confirm() 方法,因為該頻道與舊頻道不同,并且所有新頻道的默認設置是不發送確認。
- 1 回答
- 0 關注
- 183 瀏覽
添加回答
舉報
0/150
提交
取消