// AMQPDeclareExchange attempts to declare the configured AMQP exchange, // returning silently if already declared, erroring if nonexistant and // unable to create. func amqpDeclareExchange(conn *amqp.Connection) error { var err error var ch *amqp.Channel log := blog.GetAuditLogger() ch, err = conn.Channel() if err != nil { log.Crit(fmt.Sprintf("Could not connect Channel: %s", err)) return err } err = ch.ExchangeDeclarePassive( AmqpExchange, AmqpExchangeType, AmqpDurable, AmqpDeleteUnused, AmqpInternal, AmqpNoWait, nil) if err != nil { log.Info(fmt.Sprintf("Exchange %s does not exist on AMQP server, creating.", AmqpExchange)) // Channel is invalid at this point, so recreate ch.Close() ch, err = conn.Channel() if err != nil { log.Crit(fmt.Sprintf("Could not connect Channel: %s", err)) return err } err = ch.ExchangeDeclare( AmqpExchange, AmqpExchangeType, AmqpDurable, AmqpDeleteUnused, AmqpInternal, AmqpNoWait, nil) if err != nil { log.Crit(fmt.Sprintf("Could not declare exchange: %s", err)) ch.Close() return err } log.Info(fmt.Sprintf("Created exchange %s.", AmqpExchange)) } ch.Close() return err }