in internal/remote/codec.go [173:215]
func encode(command *RemotingCommand) ([]byte, error) {
	var (
		header []byte
		err    error
	)
	switch codecType {
	case JsonCodecs:
		header, err = jsonSerializer.encodeHeader(command)
	case RocketMQCodecs:
		header, err = rocketMqSerializer.encodeHeader(command)
	}
	if err != nil {
		return nil, err
	}
	frameSize := 4 + len(header) + len(command.Body)
	buf := bytes.NewBuffer(make([]byte, frameSize))
	buf.Reset()
	err = binary.Write(buf, binary.BigEndian, int32(frameSize))
	if err != nil {
		return nil, err
	}
	err = binary.Write(buf, binary.BigEndian, markProtocolType(int32(len(header))))
	if err != nil {
		return nil, err
	}
	err = binary.Write(buf, binary.BigEndian, header)
	if err != nil {
		return nil, err
	}
	err = binary.Write(buf, binary.BigEndian, command.Body)
	if err != nil {
		return nil, err
	}
	return buf.Bytes(), nil
}