code: func (conn *Connection) QueueSubscribe(ctx context.Context, name string, subject string, group string, output chan *ConnectorMessage) error {
  	var err error
  
  	s := &channelSubscription{
  		in:   make(chan *nats.Msg, cap(output)),
  		out:  output,
  		quit: make(chan interface{}, 1),
  	}
  
  	conn.subMu.Lock()
  	conn.chanSubscriptions[name] = s
  	conn.subMu.Unlock()
  
  	copier := func(ctx context.Context, s *channelSubscription) {
  		for {
  			select {
  			case m := <-s.in:
  				s.out <- &ConnectorMessage{Data: m.Data, Reply: m.Reply, Subject: m.Subject}
  			case <-ctx.Done():
  				conn.Unsubscribe(name)
  				return
  			case <-s.quit:
  				close(s.in)
  				return
  			}
  		}
  	}
  
  	go copier(ctx, s)
  
  	conn.logger.Debugf("Subscribing to %s in group '%s' on server %s", subject, group, conn.ConnectedServer())
  
  	s.subscription, err = conn.nats.ChanQueueSubscribe(subject, group, s.in)
  	if err != nil {
  		return fmt.Errorf("Could not subscribe to subscription %s: %s", name, err)
  	}
  
  	return err
  }
docs: // QueueSubscribe is a lot like ChanQueueSubscribe but you provide it the queue to dump messages in,
  // it also takes a context and will unsubscribe when the context is cancelled