diff --git a/config/base_config.go b/config/base_config.go
index 909b6bc8f48f51528de93aa67ac788f05a8c18b2..6d5ec7e2498ba65b2a6833b6c9cefcb3394e60df 100644
--- a/config/base_config.go
+++ b/config/base_config.go
@@ -27,6 +27,7 @@ import (
 
 import (
 	perrors "github.com/pkg/errors"
+	"gopkg.in/yaml.v2"
 )
 
 import (
@@ -366,15 +367,24 @@ func initializeStruct(t reflect.Type, v reflect.Value) {
 
 }
 
-// loadYmlConfig Load yml config byte from file
-func loadYmlConfig(confRouterFile string) ([]byte, error) {
-	if len(confRouterFile) == 0 {
+// loadYMLConfig Load yml config byte from file
+func loadYMLConfig(confProFile string) ([]byte, error) {
+	if len(confProFile) == 0 {
 		return nil, perrors.Errorf("application configure(provider) file name is nil")
 	}
 
-	if path.Ext(confRouterFile) != ".yml" {
-		return nil, perrors.Errorf("application configure file name{%v} suffix must be .yml", confRouterFile)
+	if path.Ext(confProFile) != ".yml" {
+		return nil, perrors.Errorf("application configure file name{%v} suffix must be .yml", confProFile)
 	}
 
-	return ioutil.ReadFile(confRouterFile)
+	return ioutil.ReadFile(confProFile)
+}
+
+// unmarshalYMLConfig Load yml config byte from file , then unmarshal to object
+func unmarshalYMLConfig(confProFile string, out interface{}) error {
+	confFileStream, err := loadYMLConfig(confProFile)
+	if err != nil {
+		return perrors.Errorf("ioutil.ReadFile(file:%s) = error:%v", confProFile, perrors.WithStack(err))
+	}
+	return yaml.Unmarshal(confFileStream, out)
 }
diff --git a/config/base_config_test.go b/config/base_config_test.go
index d16b2420922ece60ef2135729cd47d5aa73a3760..6973a4a18b5e3a78d9039bc818a5a2a046613783 100644
--- a/config/base_config_test.go
+++ b/config/base_config_test.go
@@ -18,6 +18,7 @@ package config
 
 import (
 	"fmt"
+	"path/filepath"
 	"reflect"
 	"testing"
 )
@@ -517,3 +518,13 @@ func Test_initializeStruct(t *testing.T) {
 		return consumerConfig.References != nil
 	})
 }
+
+func TestUnmarshalYMLConfig(t *testing.T) {
+	conPath, err := filepath.Abs("./testdata/consumer_config_with_configcenter.yml")
+	assert.NoError(t, err)
+	c := &ConsumerConfig{}
+	assert.NoError(t, unmarshalYMLConfig(conPath, c))
+	assert.Equal(t, "default", c.ProxyFactory)
+	assert.Equal(t, "dubbo.properties", c.ConfigCenterConfig.ConfigFile)
+	assert.Equal(t, "100ms", c.Connect_Timeout)
+}
diff --git a/config/condition_router_config.go b/config/condition_router_config.go
index 20d096a37399480f33253a6e461cb013a8797599..a95b2d2b1265a4c069abd8cbc682a9474c15f454 100644
--- a/config/condition_router_config.go
+++ b/config/condition_router_config.go
@@ -30,7 +30,7 @@ import (
 //RouterInit Load config file to init router config
 func RouterInit(confRouterFile string) error {
 	fileRouterFactories := extension.GetFileRouterFactories()
-	bytes, err := loadYmlConfig(confRouterFile)
+	bytes, err := loadYMLConfig(confRouterFile)
 	if err != nil {
 		return perrors.Errorf("ioutil.ReadFile(file:%s) = error:%v", confRouterFile, perrors.WithStack(err))
 	}
diff --git a/config/consumer_config.go b/config/consumer_config.go
index 98917ebca2ff3abcce6c952a9bc78d93cd74f5d8..94da301ce45acedb720120d56dc07bf76c780d7f 100644
--- a/config/consumer_config.go
+++ b/config/consumer_config.go
@@ -18,8 +18,6 @@
 package config
 
 import (
-	"io/ioutil"
-	"path"
 	"time"
 )
 
@@ -27,7 +25,6 @@ import (
 	"github.com/creasty/defaults"
 	"github.com/dubbogo/getty"
 	perrors "github.com/pkg/errors"
-	"gopkg.in/yaml.v2"
 )
 
 import (
@@ -90,16 +87,8 @@ func ConsumerInit(confConFile string) error {
 		return perrors.Errorf("application configure(consumer) file name is nil")
 	}
 
-	if path.Ext(confConFile) != ".yml" {
-		return perrors.Errorf("application configure file name{%v} suffix must be .yml", confConFile)
-	}
-
-	confFileStream, err := ioutil.ReadFile(confConFile)
-	if err != nil {
-		return perrors.Errorf("ioutil.ReadFile(file:%s) = error:%v", confConFile, perrors.WithStack(err))
-	}
 	consumerConfig = &ConsumerConfig{}
-	err = yaml.Unmarshal(confFileStream, consumerConfig)
+	err := unmarshalYMLConfig(confConFile, consumerConfig)
 	if err != nil {
 		return perrors.Errorf("yaml.Unmarshal() = error:%v", perrors.WithStack(err))
 	}
diff --git a/config/provider_config.go b/config/provider_config.go
index 2967ecad3a49218aecf87be7d8e2f76281bfb1b4..a36fd4d0a07c3203e53582cbf2f3442d880a3981 100644
--- a/config/provider_config.go
+++ b/config/provider_config.go
@@ -17,15 +17,9 @@
 
 package config
 
-import (
-	"io/ioutil"
-	"path"
-)
-
 import (
 	"github.com/creasty/defaults"
 	perrors "github.com/pkg/errors"
-	"gopkg.in/yaml.v2"
 )
 
 import (
@@ -81,16 +75,8 @@ func ProviderInit(confProFile string) error {
 		return perrors.Errorf("application configure(provider) file name is nil")
 	}
 
-	if path.Ext(confProFile) != ".yml" {
-		return perrors.Errorf("application configure file name{%v} suffix must be .yml", confProFile)
-	}
-
-	confFileStream, err := ioutil.ReadFile(confProFile)
-	if err != nil {
-		return perrors.Errorf("ioutil.ReadFile(file:%s) = error:%v", confProFile, perrors.WithStack(err))
-	}
 	providerConfig = &ProviderConfig{}
-	err = yaml.Unmarshal(confFileStream, providerConfig)
+	err := unmarshalYMLConfig(confProFile, providerConfig)
 	if err != nil {
 		return perrors.Errorf("yaml.Unmarshal() = error:%v", perrors.WithStack(err))
 	}