diff --git a/examples/go-server/app/config.go b/examples/go-server/app/config.go
index 11b0f0d6251df5dc6d7583bef64f0df4572a8163..bdf30391a1f9ad89b1e6af9fbb42b52f52f337e2 100644
--- a/examples/go-server/app/config.go
+++ b/examples/go-server/app/config.go
@@ -1,13 +1,3 @@
-/******************************************************
-# DESC    : env var & configure
-# AUTHOR  : Alex Stocks
-# VERSION : 1.0
-# LICENCE : Apache License 2.0
-# EMAIL   : alexstocks@foxmail.com
-# MOD     : 2016-07-21 16:41
-# FILE    : config.go
-******************************************************/
-
 package main
 
 import (
@@ -16,14 +6,13 @@ import (
 	"os"
 	"path"
 	"time"
+)
 
+import (
 	"github.com/AlexStocks/goext/log"
-
 	log "github.com/AlexStocks/log4go"
-
-	jerrors "github.com/juju/errors"
-
 	"github.com/dubbo/dubbo-go/registry"
+	jerrors "github.com/juju/errors"
 	yaml "gopkg.in/yaml.v2"
 )
 
@@ -87,7 +76,8 @@ func initServerConf() *ServerConfig {
 		return nil
 	}
 	if conf.Registry_Config.Timeout, err = time.ParseDuration(conf.Registry_Config.TimeoutStr); err != nil {
-		panic(fmt.Sprintf("time.ParseDuration(Registry_Config.Timeout:%#v) = error:%s", conf.Registry_Config.TimeoutStr, err))
+		panic(fmt.Sprintf("time.ParseDuration(Registry_Config.Timeout:%#v) = error:%s",
+			conf.Registry_Config.TimeoutStr, err))
 		return nil
 	}
 
diff --git a/examples/go-server/app/server.go b/examples/go-server/app/server.go
index cc788cef10785f7ded25f3fa3af94add0ea38c36..8cb3f03f730230e8c24db14fec72ce8c4f5d65b2 100644
--- a/examples/go-server/app/server.go
+++ b/examples/go-server/app/server.go
@@ -1,13 +1,3 @@
-/******************************************************
-# DESC    : provider example
-# AUTHOR  : Alex Stocks
-# VERSION : 1.0
-# LICENCE : Apache License 2.0
-# EMAIL   : alexstocks@foxmail.com
-# MOD     : 2016-07-21 16:41
-# FILE    : server.go
-******************************************************/
-
 package main
 
 import (
@@ -18,9 +8,10 @@ import (
 	"os/signal"
 	"strconv"
 	"syscall"
+)
 
+import (
 	// "github.com/AlexStocks/gocolor"
-
 	"github.com/AlexStocks/goext/net"
 	"github.com/AlexStocks/goext/time"
 	log "github.com/AlexStocks/log4go"
@@ -30,7 +21,7 @@ import (
 )
 
 var (
-	survivalTimeout int = 3e9
+	survivalTimeout = int(3e9)
 	servo           *jsonrpc.Server
 )
 
diff --git a/examples/go-server/app/user.go b/examples/go-server/app/user.go
index 65aa049174a1e22416e31df50229d322c7957919..d8f307549b3d7faab1c9404e01048f7cbd1b4a87 100644
--- a/examples/go-server/app/user.go
+++ b/examples/go-server/app/user.go
@@ -1,13 +1,3 @@
-/*****************************************************
-# DESC    : UserProvider Service
-# AUTHOR  : Alex Stocks
-# VERSION : 1.0
-# LICENCE : Apache License 2.0
-# EMAIL   : alexstocks@foxmail.com
-# MOD     : 2016-07-21 19:22
-# FILE    : user.go
-******************************************************/
-
 package main
 
 import (
@@ -83,16 +73,16 @@ func init() {
 
 /*
 // you can define your json unmarshal function here
-func (this *UserId) UnmarshalJSON(value []byte) error {
-	this.Id = string(value)
-	this.Id = strings.TrimPrefix(this.Id, "\"")
-	this.Id = strings.TrimSuffix(this.Id, `"`)
+func (u *UserId) UnmarshalJSON(value []byte) error {
+	u.Id = string(value)
+	u.Id = strings.TrimPrefix(u.Id, "\"")
+	u.Id = strings.TrimSuffix(u.Id, `"`)
 
 	return nil
 }
 */
 
-func (this *UserProvider) getUser(userId string) (*User, error) {
+func (u *UserProvider) getUser(userId string) (*User, error) {
 	if user, ok := userMap.user[userId]; ok {
 		return &user, nil
 	}
@@ -102,12 +92,12 @@ func (this *UserProvider) getUser(userId string) (*User, error) {
 
 /*
 // can not work
-func (this *UserProvider) GetUser(ctx context.Context, req *UserId, rsp *User) error {
+func (u *UserProvider) GetUser(ctx context.Context, req *UserId, rsp *User) error {
 	var (
 		err  error
 		user *User
 	)
-	user, err = this.getUser(req.Id)
+	user, err = u.getUser(req.Id)
 	if err == nil {
 		*rsp = *user
 		gxlog.CInfo("rsp:%#v", rsp)
@@ -123,14 +113,14 @@ func (this *UserProvider) GetUser(ctx context.Context, req *UserId, rsp *User) e
 
 /*
 // work
-func (this *UserProvider) GetUser(ctx context.Context, req *string, rsp *User) error {
+func (u *UserProvider) GetUser(ctx context.Context, req *string, rsp *User) error {
 	var (
 		err  error
 		user *User
 	)
 
 	gxlog.CInfo("req:%#v", *req)
-	user, err = this.getUser(*req)
+	user, err = u.getUser(*req)
 	if err == nil {
 		*rsp = *user
 		gxlog.CInfo("rsp:%#v", rsp)
@@ -144,30 +134,30 @@ func (this *UserProvider) GetUser(ctx context.Context, req *string, rsp *User) e
 }
 */
 
-func (this *UserProvider) GetUser(ctx context.Context, req []string, rsp *User) error {
+func (u *UserProvider) GetUser(ctx context.Context, req []string, rsp *User) error {
 	var (
 		err  error
 		user *User
 	)
 
 	gxlog.CInfo("req:%#v", req)
-	user, err = this.getUser(req[0])
+	user, err = u.getUser(req[0])
 	if err == nil {
 		*rsp = *user
 		gxlog.CInfo("rsp:%#v", rsp)
 		// s, _ := json.Marshal(rsp)
-		// fmt.Println(string(s))
+		// fmt.Println("hello0:", string(s))
 
 		// s, _ = json.Marshal(*rsp)
-		// fmt.Println(string(s))
+		// fmt.Println("hello1:", string(s))
 	}
 	return err
 }
 
-func (this *UserProvider) Service() string {
+func (u *UserProvider) Service() string {
 	return "com.ikurento.user.UserProvider"
 }
 
-func (this *UserProvider) Version() string {
+func (u *UserProvider) Version() string {
 	return ""
 }
diff --git a/examples/go-server/app/version.go b/examples/go-server/app/version.go
index 520c7dc6b9946aad8996b6da2af0b4fbd6f727bc..c7552b26e11ec15fd51f3e18905d35d577647cd7 100644
--- a/examples/go-server/app/version.go
+++ b/examples/go-server/app/version.go
@@ -1,15 +1,5 @@
-/******************************************************
-# DESC    : client version
-# AUTHOR  : Alex Stocks
-# VERSION : 1.0
-# LICENCE : Apache License 2.0
-# EMAIL   : alexstocks@foxmail.com
-# MOD     : 2016-07-21 16:41
-# FILE    : version.go
-******************************************************/
-
 package main
 
 var (
-	Version string = "0.2.0"
+	Version string = "0.3.1"
 )
diff --git a/examples/go-server/profiles/dev/server.yml b/examples/go-server/profiles/dev/server.yml
index 7b202f9311f74c2aadd217ddaceb9b18e4e4f8cf..99a7d849ff34f0b17ca2ccb1a0bab6a27549c082 100644
--- a/examples/go-server/profiles/dev/server.yml
+++ b/examples/go-server/profiles/dev/server.yml
@@ -15,6 +15,7 @@ application_config:
     module : "dubbogo user-info server"
     version : "0.0.1"
     owner : "ZX"
+    environment: "dev"
 
 registry_config:
     timeout	: "3s"
diff --git a/examples/go-server/profiles/release/server.yml b/examples/go-server/profiles/release/server.yml
index 7b202f9311f74c2aadd217ddaceb9b18e4e4f8cf..d41930a809c4d4632dc114774a934569ef1e528c 100644
--- a/examples/go-server/profiles/release/server.yml
+++ b/examples/go-server/profiles/release/server.yml
@@ -15,6 +15,7 @@ application_config:
     module : "dubbogo user-info server"
     version : "0.0.1"
     owner : "ZX"
+    environment: "product"
 
 registry_config:
     timeout	: "3s"
diff --git a/examples/go-server/profiles/test/server.yml b/examples/go-server/profiles/test/server.yml
index 7b202f9311f74c2aadd217ddaceb9b18e4e4f8cf..8fb8b5343e5b49d9886b48bcec3455b239b411ff 100644
--- a/examples/go-server/profiles/test/server.yml
+++ b/examples/go-server/profiles/test/server.yml
@@ -15,6 +15,7 @@ application_config:
     module : "dubbogo user-info server"
     version : "0.0.1"
     owner : "ZX"
+    environment: "test"
 
 registry_config:
     timeout	: "3s"
diff --git a/examples/java-client/src/main/java/com/ikurento/user/Consumer.java b/examples/java-client/src/main/java/com/ikurento/user/Consumer.java
index 8156c73707d650465c4f80a33c47e2b642751224..5830ac716e8d2ea6a72b3c5921f29a734796a997 100755
--- a/examples/java-client/src/main/java/com/ikurento/user/Consumer.java
+++ b/examples/java-client/src/main/java/com/ikurento/user/Consumer.java
@@ -39,7 +39,7 @@ public class Consumer {
 
     private void testGetUser() throws Exception {
         try {
-            User user1 = userProvider.GetUser("003");
+            User user1 = userProvider.GetUser("A003");
             System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " +
                     " UserInfo, Id:" + user1.getId() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString()
                     + ", age:" + user1.getAge() + ", time:" + user1.getTime().toString());
@@ -51,9 +51,9 @@ public class Consumer {
     private void testGetUsers() throws Exception {
         try {
             List<String> userIDList = new ArrayList<String>();
-            userIDList.add("001");
-            userIDList.add("002");
-            userIDList.add("003");
+            userIDList.add("A001");
+            userIDList.add("A002");
+            userIDList.add("A003");
 
             List<User> userList = userProvider.GetUsers(userIDList);
 
@@ -72,6 +72,7 @@ public class Consumer {
     public void start() throws Exception {
         testGetUser();
         // testGetUsers();
-        Thread.sleep(120000);
+//        Thread.sleep(120000);
+Thread.sleep(2000);
     }
 }
diff --git a/examples/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml b/examples/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
index 82dd79656f4108b3b53d1292ccd64060454a8666..c01f4ab064a83aa62adc7de676cdaede7108bd23 100644
--- a/examples/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
+++ b/examples/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
@@ -33,9 +33,9 @@
 	<dubbo:protocol id="jsonrpc" name="jsonrpc" />
 
 	<!-- 声明需要使用的服务接口 -->
-	<!-- dubbo:reference id="userProvider" protocol="jsonrpc" interface="com.ikurento.user.UserProvider" / -->
-	<dubbo:reference id="userProvider" protocol="dubbo" interface="com.ikurento.user.UserProvider">
-            <dubbo:parameter key="heartbeat" value="10000"/>
+	<dubbo:reference id="userProvider" protocol="jsonrpc" interface="com.ikurento.user.UserProvider">
+	<!-- dubbo:reference id="userProvider" protocol="dubbo" interface="com.ikurento.user.UserProvider">
+            <dubbo:parameter key="heartbeat" value="10000"/ -->
     </dubbo:reference>
 
 </beans>
diff --git a/examples/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java b/examples/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
index bbb1ef8d608028d12feaf493703a7b950c97fb5f..2464ca1c2c5dbb3b615315ba91decae2cd6d7166 100755
--- a/examples/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
+++ b/examples/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
@@ -19,10 +19,10 @@ public class UserProviderImpl implements UserProvider {
     Map<String, User> userMap = new HashMap<String, User>();
 
     public UserProviderImpl() {
-        userMap.put("001", new User("001", "demo-zhangsan", 18));
-        userMap.put("002", new User("002", "demo-lisi", 20));
-        userMap.put("003", new User("003", "demo-lily", 23));
-        userMap.put("004", new User("004", "demo-lisa", 32));
+        userMap.put("A001", new User("A001", "demo-zhangsan", 18));
+        userMap.put("A002", new User("A002", "demo-lisi", 20));
+        userMap.put("A003", new User("A003", "demo-lily", 23));
+        userMap.put("A004", new User("A004", "demo-lisa", 32));
     }
 
     public boolean isLimit(Gender gender, String name) {
diff --git a/jsonrpc/http.go b/jsonrpc/http.go
index 3ba0d25edb09d8c1c15373501b95b37115fd481c..aa249e7a3b2b4547853512d9af69eec987f5a7fd 100644
--- a/jsonrpc/http.go
+++ b/jsonrpc/http.go
@@ -106,7 +106,7 @@ func (c *HTTPClient) Call(ctx context.Context, service registry.ServiceURL, req
 	reqTimeout := c.options.HTTPTimeout
 	if len(service.Query.Get("timeout")) != 0 {
 
-		if timeout, err := time.ParseDuration(service.Query.Get("timeout")+"s"); err == nil {
+		if timeout, err := time.ParseDuration(service.Query.Get("timeout") + "s"); err == nil {
 			if timeout < reqTimeout {
 				reqTimeout = timeout
 			}
diff --git a/jsonrpc/map.go b/jsonrpc/map.go
index d56aa75a449bacd433e24480489c9008f18ec8a6..e423933910b1a0163e30f56655518a5e42a7312b 100644
--- a/jsonrpc/map.go
+++ b/jsonrpc/map.go
@@ -258,8 +258,10 @@ func (server *serviceMap) serveRequest(ctx context.Context,
 		return jerrors.Trace(err)
 	}
 	rsp := &http.Response{
-		Header:        make(http.Header),
 		StatusCode:    code,
+		ProtoMajor:    1,
+		ProtoMinor:    1,
+		Header:        make(http.Header),
 		ContentLength: int64(len(rspStream)),
 		Body:          ioutil.NopCloser(bytes.NewReader(rspStream)),
 	}
diff --git a/registry/provider.go b/registry/provider.go
index e80cdfd98156b8d7a5bc5237c72e66741fa0cf87..bf6ed222ef81834d5a66f2b03d076328e30e94ea 100644
--- a/registry/provider.go
+++ b/registry/provider.go
@@ -22,6 +22,7 @@ import (
 //////////////////////////////////////////////
 
 const (
+	defaultTimeout           = int64(10e9)
 	ProviderRegistryZkClient = "provider zk registry"
 )
 
@@ -84,7 +85,7 @@ type ZkProviderRegistry struct {
 
 func NewZkProviderRegistry(opts ...Option) (*ZkProviderRegistry, error) {
 	r := &ZkProviderRegistry{
-		birth:    time.Now().Unix(),
+		birth:    time.Now().UnixNano(),
 		done:     make(chan struct{}),
 		services: make(map[string]ServiceConfigIf),
 		zkPath:   make(map[string]int),
@@ -220,8 +221,11 @@ func (r *ZkProviderRegistry) register(conf *ProviderServiceConfig) error {
 	}
 
 	params = url.Values{}
-	params.Add("interface", conf.ServiceConfig.Service)
+	params.Add("anyhost", "true")
 	params.Add("application", r.ApplicationConfig.Name)
+	params.Add("default.timeout", fmt.Sprintf("%d", defaultTimeout/1e6))
+	params.Add("environment", r.ApplicationConfig.Environment)
+	params.Add("interface", conf.ServiceConfig.Service)
 	revision = r.ApplicationConfig.Version
 	if revision == "" {
 		revision = "0.1.0"
@@ -241,9 +245,8 @@ func (r *ZkProviderRegistry) register(conf *ProviderServiceConfig) error {
 	params.Add("side", (DubboType(PROVIDER)).Role())
 	params.Add("pid", processID)
 	params.Add("ip", localIP)
-	params.Add("timeout", fmt.Sprintf("%v", r.Timeout.Seconds()))
-	// params.Add("timestamp", time.Now().Format("20060102150405"))
-	params.Add("timestamp", fmt.Sprintf("%d", r.birth))
+	params.Add("timeout", fmt.Sprintf("%d", int64(r.Timeout)/1e6))
+	params.Add("timestamp", fmt.Sprintf("%d", r.birth/1e6))
 	if conf.ServiceConfig.Version != "" {
 		params.Add("version", conf.ServiceConfig.Version)
 	}
diff --git a/registry/registry.go b/registry/registry.go
index 7172425af17eb2c7c823237501d0d2873e48d307..437756b1db5540e33dcde16fd4516b009974efe9 100644
--- a/registry/registry.go
+++ b/registry/registry.go
@@ -29,6 +29,7 @@ type ApplicationConfig struct {
 	Module       string `yaml:"module" json:"module,omitempty"`
 	Version      string `yaml:"version" json:"version,omitempty"`
 	Owner        string `yaml:"owner" json:"owner,omitempty"`
+	Environment  string `yaml:"environment" json:"environment,omitempty"`
 }
 
 func (c *ApplicationConfig) ToString() string {
@@ -37,11 +38,11 @@ func (c *ApplicationConfig) ToString() string {
 }
 
 type RegistryConfig struct {
-	Address  []string `required:"true" yaml:"address"  json:"address,omitempty"`
-	UserName string   `yaml:"user_name" json:"user_name,omitempty"`
-	Password string   `yaml:"password" json:"password,omitempty"`
-	TimeoutStr  string      `yaml:"timeout" default:"5s" json:"timeout,omitempty"` // unit: second
-	Timeout  time.Duration  `yaml:"-"  json:"-"`
+	Address    []string      `required:"true" yaml:"address"  json:"address,omitempty"`
+	UserName   string        `yaml:"user_name" json:"user_name,omitempty"`
+	Password   string        `yaml:"password" json:"password,omitempty"`
+	TimeoutStr string        `yaml:"timeout" default:"5s" json:"timeout,omitempty"` // unit: second
+	Timeout    time.Duration `yaml:"-"  json:"-"`
 }
 
 //////////////////////////////////////////////