// shutdownChannel is a general closer function for channels func shutdownChannel(channel *amqp.Channel, tag string) error { // This waits for a server acknowledgment which means the sockets will have // flushed all outbound publishings prior to returning. It's important to // block on Close to not lose any publishings. if err := channel.Cancel(tag, true); err != nil { if amqpError, isAmqpError := err.(*amqp.Error); isAmqpError && amqpError.Code != 504 { return fmt.Errorf("AMQP connection close error: %s", err) } } if err := channel.Close(); err != nil { return err } return nil }