// A simplified way to declare and subscribe to an AMQP queue func amqpSubscribe(ch *amqp.Channel, name string, log *blog.AuditLogger) (msgs <-chan amqp.Delivery, err error) { err = ch.ExchangeDeclare( AmqpExchange, AmqpExchangeType, AmqpDurable, AmqpDeleteUnused, AmqpInternal, AmqpNoWait, nil) if err != nil { log.Crit(fmt.Sprintf("Could not declare exchange: %s", err)) return } q, err := ch.QueueDeclare( name, AmqpDurable, AmqpDeleteUnused, AmqpExclusive, AmqpNoWait, nil) if err != nil { log.Crit(fmt.Sprintf("Could not declare queue: %s", err)) return } err = ch.QueueBind( name, name, AmqpExchange, false, nil) if err != nil { log.Crit(fmt.Sprintf("Could not bind queue: %s", err)) return } msgs, err = ch.Consume( q.Name, "", AmqpAutoAck, AmqpExclusive, AmqpNoLocal, AmqpNoWait, nil) if err != nil { log.Crit(fmt.Sprintf("Could not subscribe to queue: %s", err)) return } return }
// A simplified way to declare and subscribe to an AMQP queue func amqpSubscribe(ch *amqp.Channel, name string, consumerName string, log *blog.AuditLogger) (<-chan amqp.Delivery, error) { var err error _, err = ch.QueueDeclare( name, AmqpDurable, AmqpDeleteUnused, AmqpExclusive, AmqpNoWait, nil) if err != nil { log.Crit(fmt.Sprintf("Could not declare queue: %s", err)) return nil, err } routingKey := name err = ch.QueueBind( name, routingKey, AmqpExchange, false, nil) if err != nil { log.Crit(fmt.Sprintf("Could not bind to queue [%s]. NOTE: You may need to delete %s to re-trigger the bind attempt after fixing permissions, or manually bind the queue to %s.", name, name, routingKey)) return nil, err } // A consumer name is used so that the specific consumer can be cancelled later // if signalled. If no name is used a UID is used which cannot be retrieved (as // far as I can tell). msgs, err := ch.Consume( name, consumerName, AmqpAutoAck, AmqpExclusive, AmqpNoLocal, AmqpNoWait, nil) if err != nil { log.Crit(fmt.Sprintf("Could not subscribe to queue: %s", err)) return nil, err } return msgs, err }
// A simplified way to declare and subscribe to an AMQP queue func amqpSubscribe(ch *amqp.Channel, name string, log *blog.AuditLogger) (<-chan amqp.Delivery, error) { var err error _, err = ch.QueueDeclare( name, AmqpDurable, AmqpDeleteUnused, AmqpExclusive, AmqpNoWait, nil) if err != nil { log.Crit(fmt.Sprintf("Could not declare queue: %s", err)) return nil, err } routingKey := name err = ch.QueueBind( name, routingKey, AmqpExchange, false, nil) if err != nil { log.Crit(fmt.Sprintf("Could not bind to queue [%s]. NOTE: You may need to delete %s to re-trigger the bind attempt after fixing permissions, or manually bind the queue to %s.", name, name, routingKey)) return nil, err } msgs, err := ch.Consume( name, "", AmqpAutoAck, AmqpExclusive, AmqpNoLocal, AmqpNoWait, nil) if err != nil { log.Crit(fmt.Sprintf("Could not subscribe to queue: %s", err)) return nil, err } return msgs, err }