func (server *Server) addQueue(q *queue.Queue) error { server.serverLock.Lock() defer server.serverLock.Unlock() server.queues[q.Name] = q var defaultExchange = server.exchanges[""] var defaultBinding, err = binding.NewBinding(q.Name, "", q.Name, amqp.NewTable(), false) if err != nil { return err } defaultExchange.AddBinding(defaultBinding, q.ConnId) q.Start() return nil }
func (server *Server) depersistQueue(queue *queue.Queue, bindings []*binding.Binding) error { return server.db.Update(func(tx *bolt.Tx) error { for _, binding := range bindings { if err := binding.DepersistBoltTx(tx); err != nil { return err } } return queue.DepersistBoltTx(tx) }) }
func (channel *Channel) addConsumer(q *queue.Queue, method *amqp.BasicConsume) *amqp.AMQPError { var classId, methodId = method.MethodIdentifier() // Create consumer var consumer = consumer.NewConsumer( channel.server.msgStore, method.Arguments, channel, method.ConsumerTag, method.Exclusive, method.NoAck, method.NoLocal, q, q.Name, channel.defaultPrefetchSize, channel.defaultPrefetchCount, channel.conn.id, ) channel.consumerLock.Lock() defer channel.consumerLock.Unlock() // Make sure the doesn't exist on this channel _, found := channel.consumers[consumer.ConsumerTag] if found { return amqp.NewHardError( 530, fmt.Sprintf("Consumer tag already exists: %s", consumer.ConsumerTag), classId, methodId, ) } // Add the consumer to the queue, then channel code, err := q.AddConsumer(consumer, method.Exclusive) if err != nil { return amqp.NewSoftError(code, err.Error(), classId, methodId) } channel.consumers[consumer.ConsumerTag] = consumer consumer.Start() return nil }