func commandGet(q queue.Queue, tokens []string, r *bufio.Reader, w *bufio.Writer) error { fields := len(tokens) if fields < 2 { fmt.Fprint(w, ERROR) return errors.NotValidf("mc tokens %v ", tokens) } cmd := tokens[0] keyValues := make([]pair, 0) for _, key := range tokens[1:] { k := strings.Split(key, ".") queue := k[0] group := defaultGroup if len(k) > 1 { group = k[0] queue = k[1] } id, data, flag, err := q.RecvMessage(queue, group) if err != nil { if errors.Cause(err) == kafka.ErrTimeout { w.WriteString(END) } else { fmt.Fprintf(w, "%s %s\r\n", ENGINE_ERROR_PREFIX, err) } return nil } // eset data : idlen id data if strings.EqualFold(cmd, EGET_NAME) { idLen := (byte)(len(id)) esetData := make([]byte, 0) esetData = append(esetData, idLen) esetData = append(esetData, ([]byte)(id)...) data = append(esetData, data...) } keyValues = append(keyValues, pair{ key: key, queue: queue, group: group, id: id, value: data, flag: flag, }) } for _, kv := range keyValues { fmt.Fprintf(w, "%s %s %d %d\r\n", VALUE, kv.key, kv.flag, len(kv.value)) w.Write(kv.value) w.WriteString("\r\n") if strings.EqualFold(cmd, GET_NAME) { q.AckMessage(kv.queue, kv.group, kv.id) } } w.WriteString(END) return nil }