From ccb2d3025bb671b6fee9184a2aef9d65f43618fd Mon Sep 17 00:00:00 2001 From: AlexStocks <alexstocks@foxmail.com> Date: Sun, 10 Mar 2019 00:58:02 +0800 Subject: [PATCH] Imp: Add environment/host/default.timeout for go server schema; Fix: change go server schema timeout/time unit from second to millisecond; Fix: add http protocol 1.1 --- examples/go-server/app/config.go | 20 +++------- examples/go-server/app/server.go | 15 ++----- examples/go-server/app/user.go | 40 +++++++------------ examples/go-server/app/version.go | 12 +----- examples/go-server/profiles/dev/server.yml | 1 + .../go-server/profiles/release/server.yml | 1 + examples/go-server/profiles/test/server.yml | 1 + .../main/java/com/ikurento/user/Consumer.java | 11 ++--- .../META-INF/spring/dubbo.consumer.xml | 6 +-- .../com/ikurento/user/UserProviderImpl.java | 8 ++-- jsonrpc/http.go | 2 +- jsonrpc/map.go | 4 +- registry/provider.go | 13 +++--- registry/registry.go | 11 ++--- 14 files changed, 58 insertions(+), 87 deletions(-) diff --git a/examples/go-server/app/config.go b/examples/go-server/app/config.go index 11b0f0d62..bdf30391a 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 cc788cef1..8cb3f03f7 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 65aa04917..d8f307549 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 520c7dc6b..c7552b26e 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 7b202f931..99a7d849f 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 7b202f931..d41930a80 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 7b202f931..8fb8b5343 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 8156c7370..5830ac716 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 82dd79656..c01f4ab06 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 bbb1ef8d6..2464ca1c2 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 3ba0d25ed..aa249e7a3 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 d56aa75a4..e42393391 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 e80cdfd98..bf6ed222e 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 7172425af..437756b1d 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:"-"` } ////////////////////////////////////////////// -- GitLab