From 9694e70d9e615b2f0ffef14a2ff8c3c76641fcb9 Mon Sep 17 00:00:00 2001 From: Sage <1010309281@qq.com> Date: Mon, 18 Oct 2021 03:09:30 +0000 Subject: [PATCH 1/9] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20recover?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/miscs/err.go | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/miscs/err.go diff --git a/src/miscs/err.go b/src/miscs/err.go new file mode 100644 index 0000000..9bc33e7 --- /dev/null +++ b/src/miscs/err.go @@ -0,0 +1,9 @@ +package miscs + +func CatchRecover() { + err := recover() + if err != nil { + fmt.Printf("recover err: %s\n", err) + fmt.Printf("recover Stack: %s\n", debug.Stack()) + } +} -- Gitee From c64bf373a8472aabcb7dae70b94e47776c933b89 Mon Sep 17 00:00:00 2001 From: sage Date: Wed, 3 Nov 2021 10:48:21 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 1 - go.sum | 12 ------------ src/utils/path.go | 2 +- 3 files changed, 1 insertion(+), 14 deletions(-) diff --git a/go.mod b/go.mod index 916aa18..384e9cc 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,5 @@ require ( google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.26.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect - gopkg.in/yaml.v2 v2.3.0 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b ) diff --git a/go.sum b/go.sum index 7526e4b..7a7115a 100644 --- a/go.sum +++ b/go.sum @@ -63,7 +63,6 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= @@ -72,7 +71,6 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= @@ -108,7 +106,6 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -140,9 +137,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -186,7 +181,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= @@ -209,7 +203,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -222,7 +215,6 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -250,7 +242,6 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -271,7 +262,6 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= @@ -283,9 +273,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/utils/path.go b/src/utils/path.go index 478620a..5ba6192 100644 --- a/src/utils/path.go +++ b/src/utils/path.go @@ -16,7 +16,7 @@ func BasePath() string { return basePath } -//当前目录(与运行程序所在目录无关) +// 当前目录(与运行程序所在目录无关) func CurrentPath() string { basePath, err := filepath.Abs("./") if err != nil { -- Gitee From cab4817bc26c94782c5a6e59fee3d3e7f8500a17 Mon Sep 17 00:00:00 2001 From: sage Date: Wed, 3 Nov 2021 11:20:49 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20defaultLog=E7=9A=84?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/log/log_default.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v1/log/log_default.go b/src/v1/log/log_default.go index 2c100e8..fdbfca2 100644 --- a/src/v1/log/log_default.go +++ b/src/v1/log/log_default.go @@ -170,7 +170,7 @@ func (logger *MyLogger) logItemf(level int, format string, params ...interface{} return logger.logger.Output(3, sl) } -func NewDefaultLogger(c *MyLoggerConfig) *MyLogger { +func NewDefaultLogger(c *MyLoggerConfig) ILog { myLogger := &MyLogger{ config: c, } -- Gitee From 77e6aeac3c9571a71ad1a7b8c2860cd1fddae252 Mon Sep 17 00:00:00 2001 From: sage Date: Wed, 3 Nov 2021 11:40:28 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=20catchRecover=E7=9A=84b?= =?UTF-8?q?ug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/consts/time.go | 5 ----- src/miscs/const.go | 1 - src/miscs/err.go | 9 +++++++-- 3 files changed, 7 insertions(+), 8 deletions(-) delete mode 100644 src/consts/time.go diff --git a/src/consts/time.go b/src/consts/time.go deleted file mode 100644 index e27ece2..0000000 --- a/src/consts/time.go +++ /dev/null @@ -1,5 +0,0 @@ -package consts - -const DateTimeLayout = "2006-01-02 15:04:05" -const DateLayout = "2006-01-02" -const TimeLayout = "15:04:05" \ No newline at end of file diff --git a/src/miscs/const.go b/src/miscs/const.go index d5deb4e..a9d1583 100644 --- a/src/miscs/const.go +++ b/src/miscs/const.go @@ -1,6 +1,5 @@ package miscs - const DateTimeLayout = "2006-01-02 15:04:05" const DateLayout = "2006-01-02" const TimeLayout = "15:04:05" \ No newline at end of file diff --git a/src/miscs/err.go b/src/miscs/err.go index 9bc33e7..e1d7497 100644 --- a/src/miscs/err.go +++ b/src/miscs/err.go @@ -1,9 +1,14 @@ package miscs +import ( + "log" + "runtime/debug" +) + func CatchRecover() { err := recover() if err != nil { - fmt.Printf("recover err: %s\n", err) - fmt.Printf("recover Stack: %s\n", debug.Stack()) + log.Printf("recover err: %s\n", err) + log.Printf("recover Stack: %s\n", debug.Stack()) } } -- Gitee From 877485aae9af435987b7dd461c43090ac20cbd30 Mon Sep 17 00:00:00 2001 From: Sage <1010309281@qq.com> Date: Thu, 4 Nov 2021 21:46:19 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/dbs/run_mysql.go | 59 +++++++ examples_stc/db_mysql.go | 78 ++++++++ examples_stc/http_handler.go | 7 + src/v1/clients/dbs/db_mysql.go | 313 +++++++++++++++++++++++++++++++++ src/v1/config/db.go | 15 ++ 5 files changed, 472 insertions(+) create mode 100644 examples/dbs/run_mysql.go create mode 100644 examples_stc/db_mysql.go create mode 100644 examples_stc/http_handler.go create mode 100644 src/v1/clients/dbs/db_mysql.go create mode 100644 src/v1/config/db.go diff --git a/examples/dbs/run_mysql.go b/examples/dbs/run_mysql.go new file mode 100644 index 0000000..9dce43e --- /dev/null +++ b/examples/dbs/run_mysql.go @@ -0,0 +1,59 @@ +package main + +import ( + "gitee.com/scottq/go-framework/examples_stc" + v1config "gitee.com/scottq/go-framework/src/v1/config" + "log" + "time" +) + +func main() { + c := v1config.DBConfig{ + DbHost: "127.0.0.1", + DbPort: "3306", + DbName: "db_test", + DbUser: "root", + DbPassword: "root", + + MaxLifetime: 30 * int(time.Minute), + MaxIdleTime: 30 * int(time.Minute), + MaxOpenConns: 256, + MaxIdleConns: 80, + MaxConcatLen: "18446744073709551615", + } + log.Printf("config: %+v", c) + op, err := examples_stc.NewOpMysql(c) + if err != nil { + log.Fatalf("new op mysql err:%s", err) + return + } + + list, total, err := op.Query() + if err != nil { + log.Fatalf("query err:%s", err) + return + } + log.Printf("list: %v", list) + log.Printf("total: %d", total) + + + list, total, err = op.Query() + if err != nil { + log.Fatalf("query err:%s", err) + return + } + log.Printf("list: %v", list) + log.Printf("total: %d", total) + + // + newOp, err := op.BeginTrans() + list, total, err = newOp.Query() + if err != nil { + log.Fatalf("query err:%s", err) + return + } + defer newOp.RollbackTrans() + log.Printf("list: %v", list) + log.Printf("total: %d", total) + +} diff --git a/examples_stc/db_mysql.go b/examples_stc/db_mysql.go new file mode 100644 index 0000000..ae371d7 --- /dev/null +++ b/examples_stc/db_mysql.go @@ -0,0 +1,78 @@ +package examples_stc + +import ( + "gitee.com/scottq/go-framework/src/v1/clients/dbs" + v1config "gitee.com/scottq/go-framework/src/v1/config" +) + +type OpMysql struct { + dbs.IDBMysql +} + +func NewOpMysql(c v1config.DBConfig) (*OpMysql, error) { + db, err := dbs.NewDBMysql(c) + if err != nil { + return nil, err + } + return &OpMysql{ + db, + }, nil +} + +func (op *OpMysql) Query() ([]map[string]interface{}, int64, error) { + rows, total, err := op.ExecuteSearch("admin", []string{ + "id", + "created_at", + "nickname", + "account", + }, []string{ + "id>1", + }, []interface{}{ + }, []string{ + "id desc", + }, 1, 10) + if err != nil { + return nil, 0, err + } + + list := []map[string]interface{}{} + for rows.Next() { + id := 0 + createdAt := "" + nickname := "" + account := "" + + err := rows.Scan(&id, &createdAt, &nickname, &account) + if err != nil { + return nil, 0, err + } + list = append(list, map[string]interface{}{ + "id": id, + "created_at": createdAt, + "nickname": nickname, + "account": account, + }) + } + err = rows.Close() + if err != nil { + return nil, 0, err + } + return list, total, nil +} + +func (op *OpMysql) BeginTrans() (*OpMysql, error) { + var err error + + newOp := &OpMysql{} + newOp.IDBMysql, err = op.IDBMysql.BeginTrans() + + return newOp, err +} + +func (op *OpMysql) CommitTrans() error { + return op.IDBMysql.CommitTrans() +} + +func (op *OpMysql) RollbackTrans() error { + return op.IDBMysql.RollbackTrans() +} \ No newline at end of file diff --git a/examples_stc/http_handler.go b/examples_stc/http_handler.go new file mode 100644 index 0000000..7613d21 --- /dev/null +++ b/examples_stc/http_handler.go @@ -0,0 +1,7 @@ +package examples_stc + +import v1http "gitee.com/scottq/go-framework/src/v1/httpserver" + +func RouteHelloWord(ctx *v1http.Ctx) { + ctx.WriteStr("Hello World") +} diff --git a/src/v1/clients/dbs/db_mysql.go b/src/v1/clients/dbs/db_mysql.go new file mode 100644 index 0000000..7c4fd0a --- /dev/null +++ b/src/v1/clients/dbs/db_mysql.go @@ -0,0 +1,313 @@ +package dbs + +import ( + "database/sql" + "fmt" + v1config "gitee.com/scottq/go-framework/src/v1/config" + "github.com/go-sql-driver/mysql" + "log" + "net" + "strings" + "time" +) + +type IDBMysql interface { + DB() *sql.DB + TX() *sql.Tx + + ExecuteSearch(tableName string, fields []string, whereArr []string, whereArgs []interface{}, orderBy []string, pageNum, pageSize int64) (*sql.Rows, int64, error) + ExecuteQuery(tableName string, fields map[string]interface{}, whereArr []string, whereArgs []interface{}, orderBy []string) (bool, error) + ExecuteCreate(tableName string, fields map[string]interface{}) (int64, error) + ExecuteUpdate(tableName string, fields map[string]interface{}, whereArr []string, whereArgs []interface{}) (int64, error) + + BeginTrans() (IDBMysql, error) + CommitTrans() error + RollbackTrans() error +} +type DBMysql struct { + Edb *sql.DB + Etx *sql.Tx +} + +func (d *DBMysql) DB() *sql.DB { + return d.Edb +} + +func (d *DBMysql) TX() *sql.Tx { + return d.Etx +} + +func NewDBMysql(c v1config.DBConfig) (*DBMysql, error) { + dbConfig := mysql.NewConfig() + dbConfig.User = c.DbUser + dbConfig.Passwd = c.DbPassword + dbConfig.Net = "tcp" + dbConfig.Addr = net.JoinHostPort(c.DbHost, c.DbPort) + dbConfig.DBName = c.DbName + dbConfig.MultiStatements = true + dbConfig.RejectReadOnly = false + extParam := make(map[string]string) + if c.MaxConcatLen != "" { + extParam["group_concat_max_len"] = c.MaxConcatLen + } + dbConfig.Params = extParam + + newDb, err := sql.Open("mysql", dbConfig.FormatDSN()) + if err != nil { + log.Fatalf("connect to db %s failed", dbConfig.FormatDSN()) + return nil, err + } + if c.MaxIdleConns > 0 { + //预留并发链接数 + newDb.SetMaxIdleConns(c.MaxIdleConns) + } + if c.MaxOpenConns > 0 { + //最大支持链接 + newDb.SetMaxOpenConns(c.MaxOpenConns) + } + if c.MaxLifetime > 0 { + //每个链接最大生存时间 + newDb.SetConnMaxLifetime(time.Duration(c.MaxLifetime)) + } + if c.MaxIdleTime > 0 { + //每个链接最大空闲时间 + newDb.SetConnMaxIdleTime(time.Duration(c.MaxIdleTime)) + } + + return &DBMysql{ + Edb: newDb, + }, nil +} + +func (d *DBMysql) ExecuteSearch(tableName string, fields []string, whereArr []string, whereArgs []interface{}, orderBy []string, pageNum, pageSize int64) (*sql.Rows, int64, error) { + var err error + var total int64 + + if pageNum <= 0 { + pageNum = 1 + } + + if pageSize <= 0 || pageSize > 1000 { + pageSize = 1000 + } + + whereStr := "" + if len(whereArr) > 0 { + whereStr = "WHERE " + strings.Join(whereArr, " AND ") + } + + countSql := fmt.Sprintf( + "SELECT COUNT(id) AS total FROM `%s` %s LIMIT 1", + tableName, whereStr) + + db := d.DB() + tx := d.TX() + + //total + var stmt *sql.Stmt + if tx != nil { + stmt, err = tx.Prepare(countSql) + } else { + stmt, err = db.Prepare(countSql) + } + if err != nil { + return nil, total, err + } + + row := stmt.QueryRow(whereArgs...) + err = row.Scan(&total) + if err == sql.ErrNoRows { + return nil, 0, nil + } else if err != nil { + return nil, total, err + } + if err:=stmt.Close();err!=nil{ + return nil,0,err + } + + if len(fields) <= 0 { + fields = append(fields, "*") + } + fieldsStr := strings.Join(fields, ",") + orderByStr := strings.Join(orderBy, ",") + if orderByStr != "" { + orderByStr = "ORDER BY " + orderByStr + } + searchSql := fmt.Sprintf( + "SELECT %s FROM `%s` %s %s LIMIT ? OFFSET ?", + fieldsStr, tableName, whereStr, orderByStr) + + var stmt1 *sql.Stmt + if tx != nil { + stmt1, err = tx.Prepare(searchSql) + } else { + stmt1, err = db.Prepare(searchSql) + } + if err != nil { + return nil, total, err + } + + whereArgs = append(whereArgs, pageSize) + whereArgs = append(whereArgs, pageSize*(pageNum-1)) + + rows, err := stmt1.Query(whereArgs...) + if err != nil { + return nil, total, err + } + + return rows, total, nil +} + +func (d *DBMysql) ExecuteQuery(tableName string, fields map[string]interface{}, whereArr []string, whereArgs []interface{}, orderBy []string) (bool, error) { + var err error + + var fieldArr = []string{} + var scanArr = []interface{}{} + for k, v := range fields { + fieldArr = append(fieldArr, fmt.Sprintf("`%s`", k)) + scanArr = append(scanArr, v) + } + + whereStr := "" + if len(whereArr) > 0 { + whereStr = "WHERE " + strings.Join(whereArr, " AND ") + } + fieldStr := strings.Join(fieldArr, ",") + + orderByStr := strings.Join(orderBy, ",") + if orderByStr != "" { + orderByStr = "ORDER BY " + orderByStr + } + selectSql := fmt.Sprintf("SELECT %s FROM %s %s %s LIMIT 1", + fieldStr, tableName, whereStr, orderByStr) + + db := d.DB() + tx := d.TX() + + var stmt *sql.Stmt + if tx != nil { + stmt, err = tx.Prepare(selectSql) + } else { + stmt, err = db.Prepare(selectSql) + } + if err != nil { + return false, err + } + defer stmt.Close() + + row := stmt.QueryRow(whereArgs...) + err = row.Scan(scanArr...) + if err == sql.ErrNoRows { + return false, nil + } else if err != nil { + return false, err + } + + return true, nil +} + +func (d *DBMysql) ExecuteCreate(tableName string, fields map[string]interface{}) (int64, error) { + var err error + + var fieldArr = []string{} + var valueArr = []interface{}{} + for k, v := range fields { + fieldArr = append(fieldArr, fmt.Sprintf("`%s`=?", k)) + valueArr = append(valueArr, v) + } + + fieldStr := strings.Join(fieldArr, ",") + + db := d.DB() + tx := d.TX() + + insertSql := fmt.Sprintf("INSERT INTO %s SET %s", tableName, fieldStr) + var stmt *sql.Stmt + if tx != nil { + stmt, err = tx.Prepare(insertSql) + } else { + stmt, err = db.Prepare(insertSql) + } + + if err != nil { + return 0, err + } + defer stmt.Close() + + ret, err := stmt.Exec(valueArr...) + if err != nil { + return 0, err + } + + return ret.LastInsertId() +} + +func (d *DBMysql) ExecuteUpdate(tableName string, fields map[string]interface{}, whereArr []string, whereArgs []interface{}) (int64, error) { + var err error + + var fieldArr = []string{} + var valueArr = []interface{}{} + for k, v := range fields { + fieldArr = append(fieldArr, fmt.Sprintf("`%s`=?", k)) + valueArr = append(valueArr, v) + } + + fieldStr := strings.Join(fieldArr, ",") + + whereStr := "" + if len(whereArr) > 0 { + whereStr = "WHERE " + strings.Join(whereArr, " AND ") + } + + if len(whereArgs) > 0 { + for _, v := range whereArgs { + valueArr = append(valueArr, v) + } + } + db := d.DB() + tx := d.TX() + + updateSql := fmt.Sprintf("UPDATE %s SET %s %s", tableName, fieldStr, whereStr) + var stmt *sql.Stmt + if tx != nil { + stmt, err = tx.Prepare(updateSql) + } else { + stmt, err = db.Prepare(updateSql) + } + if err != nil { + return 0, err + } + defer stmt.Close() + + ret, err := stmt.Exec(valueArr...) + if err != nil { + return 0, err + } + + return ret.RowsAffected() +} + +func (d *DBMysql) BeginTrans() (IDBMysql, error) { + tx, err := d.Edb.Begin() + if err != nil { + return nil, err + } + return &DBMysql{ + Edb: nil, + Etx: tx, + }, nil +} + +func (d *DBMysql) CommitTrans() error { + if d.Etx == nil { + return fmt.Errorf("not begin trans") + } + return d.Etx.Commit() +} + +func (d *DBMysql) RollbackTrans() error { + if d.Etx == nil { + return fmt.Errorf("not begin trans") + } + return d.Etx.Rollback() +} diff --git a/src/v1/config/db.go b/src/v1/config/db.go new file mode 100644 index 0000000..5be687f --- /dev/null +++ b/src/v1/config/db.go @@ -0,0 +1,15 @@ +package config + +type DBConfig struct { + DbHost string `yaml:"DbHost"` + DbPort string `yaml:"DbPort"` + DbUser string `yaml:"DbUser"` + DbPassword string `yaml:"DbPassword"` + DbName string `yaml:"DbName"` + + MaxIdleConns int `default:"0" yaml:"MaxIdleConns"` //预留并发链接数 + MaxOpenConns int `default:"0" yaml:"MaxOpenConns"` //最大支持链接 + MaxLifetime int `default:"1" yaml:"ConnMaxLifetime"` //每个链接最大生存时间 + MaxIdleTime int `default:"1" yaml:"ConnMaxIdleTime"` //每个链接最大空闲时间 + MaxConcatLen string `default:"1" yaml:"MaxConcatLen"` +} -- Gitee From beca33c5e97b2317c085a56376ecfe174cf2f7b4 Mon Sep 17 00:00:00 2001 From: Sage <1010309281@qq.com> Date: Thu, 4 Nov 2021 21:48:10 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/config/db.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/v1/config/db.go b/src/v1/config/db.go index 5be687f..607f8ff 100644 --- a/src/v1/config/db.go +++ b/src/v1/config/db.go @@ -9,7 +9,7 @@ type DBConfig struct { MaxIdleConns int `default:"0" yaml:"MaxIdleConns"` //预留并发链接数 MaxOpenConns int `default:"0" yaml:"MaxOpenConns"` //最大支持链接 - MaxLifetime int `default:"1" yaml:"ConnMaxLifetime"` //每个链接最大生存时间 - MaxIdleTime int `default:"1" yaml:"ConnMaxIdleTime"` //每个链接最大空闲时间 - MaxConcatLen string `default:"1" yaml:"MaxConcatLen"` + MaxLifetime int `default:"0" yaml:"ConnMaxLifetime"` //每个链接最大生存时间 + MaxIdleTime int `default:"0" yaml:"ConnMaxIdleTime"` //每个链接最大空闲时间 + MaxConcatLen string `default:"0" yaml:"MaxConcatLen"` } -- Gitee From 098d476416404f7a9166069efe5038e60718fdac Mon Sep 17 00:00:00 2001 From: Sage <1010309281@qq.com> Date: Fri, 5 Nov 2021 10:13:28 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=20grpc=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=E5=92=8C=E5=AE=A2=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/run_grpc/client_grpc.go | 17 ++++++++---- examples/run_grpc/server_grpc.go | 35 +++++++++++++++++++----- src/v1/clients/etcd/service_discovery.go | 11 +++++--- src/v1/clients/grpc/client.go | 15 ++++++---- src/v1/clients/grpc/weight_balance.go | 7 +++-- src/v1/config/db.go | 10 +++---- src/v1/config/rpc.go | 20 ++++++++++++++ src/v1/grpcserver/server_grpc.go | 24 ++++++++++++---- src/v1/grpcserver/server_grpc_dis.go | 10 +++++-- src/v1/grpcserver/server_grpc_opt.go | 22 +++++++++++++++ src/v1/grpcserver/server_grpc_reg.go | 7 ----- 11 files changed, 134 insertions(+), 44 deletions(-) create mode 100644 src/v1/config/rpc.go create mode 100644 src/v1/grpcserver/server_grpc_opt.go delete mode 100644 src/v1/grpcserver/server_grpc_reg.go diff --git a/examples/run_grpc/client_grpc.go b/examples/run_grpc/client_grpc.go index 6a9abd8..2625dfe 100644 --- a/examples/run_grpc/client_grpc.go +++ b/examples/run_grpc/client_grpc.go @@ -5,6 +5,7 @@ import ( "fmt" "gitee.com/scottq/go-framework/grpcProtos/pb" v1clientrpc "gitee.com/scottq/go-framework/src/v1/clients/grpc" + v1config "gitee.com/scottq/go-framework/src/v1/config" v1log "gitee.com/scottq/go-framework/src/v1/log" "google.golang.org/grpc" "os" @@ -16,13 +17,19 @@ func main() { logPath := fmt.Sprintf("./runtime/logs/%s.log", filepath.Base(os.Args[0])) logger := v1log.NewZapLog("example", logPath, nil) + c := v1config.RpcClientConfig{ + RpcDisWay: "etcd", + RpcDisServer: "127.0.0.1:2379", + } + opts := []v1clientrpc.RemoteOption{} - if false { - opts = append(opts, v1clientrpc.OptEtcdDiscovery("admin", "127.0.0.1:2379")) + switch c.RpcDisWay { + case v1config.RpcByEtcd: + opts = append(opts, v1clientrpc.OptEtcdDiscovery(c.RpcDisServer)) } - conn, err := v1clientrpc.NewRemoteConn("127.0.0.1:40001", opts..., ) + conn, err := v1clientrpc.NewRemoteConn("admin","", opts...) if err != nil { logger.Error("new remote conn err:%s", err) return @@ -31,9 +38,9 @@ func main() { info := conn.GetState() logger.Info(info.String()) - c := NewRemoteClient(conn) + client := NewRemoteClient(conn) - resp, err := c.CheckAuth("12334") + resp, err := client.CheckAuth("12334") if err != nil { logger.Error("fail:%s", err) return diff --git a/examples/run_grpc/server_grpc.go b/examples/run_grpc/server_grpc.go index b41c221..f4ab6cc 100644 --- a/examples/run_grpc/server_grpc.go +++ b/examples/run_grpc/server_grpc.go @@ -2,8 +2,10 @@ package main import ( "context" + "flag" "fmt" "gitee.com/scottq/go-framework/grpcProtos/pb" + v1config "gitee.com/scottq/go-framework/src/v1/config" v1rpc "gitee.com/scottq/go-framework/src/v1/grpcserver" v1log "gitee.com/scottq/go-framework/src/v1/log" "google.golang.org/grpc" @@ -11,21 +13,40 @@ import ( "path/filepath" ) +var port = "" + +func init() { + flag.StringVar(&port, "port", "40001", "rpc lis port") +} + func main() { + flag.Parse() + logPath := fmt.Sprintf("./runtime/logs/%s.log", filepath.Base(os.Args[0])) logger := v1log.NewZapLog("example", logPath, nil) - server, err := v1rpc.NewGRPCServer("", ":40001") + c := v1config.RpcServerConfig{ + RpcLisAddr: ":" + port, + RpcRegWay: "etcd", + RpcRegServer: "0.0.0.0:2379", + RpcRequestIp: "127.0.0.1", + } + + server, err := v1rpc.NewGRPCServer("admin", c.RpcLisAddr, + v1rpc.WithOpsHandler(func(server *grpc.Server) { + s := NewDemoServer() + pb.RegisterUserSrServer(server, s) + }), + v1rpc.WithOpsRequestIp(c.RpcRequestIp), + v1rpc.WithOpsRequestPort(c.RpcRequestPort), + ) if err != nil { logger.Error("run server error:%s" + err.Error()) return } - server.HandlerFunc = func(server *grpc.Server) { - s := NewDemoServer() - pb.RegisterUserSrServer(server, s) - } - if false { - etcd, _ := v1rpc.NewEtcdSrvRegister("0.0.0.0:2379") + switch c.RpcRegWay { + case v1config.RpcByEtcd: + etcd, _ := v1rpc.NewEtcdSrvRegister(c.RpcRegServer) server.AddServiceRegister(etcd) } diff --git a/src/v1/clients/etcd/service_discovery.go b/src/v1/clients/etcd/service_discovery.go index 9472f38..ed38c6f 100644 --- a/src/v1/clients/etcd/service_discovery.go +++ b/src/v1/clients/etcd/service_discovery.go @@ -6,6 +6,7 @@ import ( clientv3 "go.etcd.io/etcd/client/v3" "google.golang.org/grpc/attributes" "google.golang.org/grpc/resolver" + "log" "strings" "sync" "time" @@ -94,7 +95,10 @@ func (sdv *ServiceDiscovery) syncCC() { addr = rInfo.SrInvoke } - addresses = append(addresses, resolver.Address{Addr: addr, Attributes: attrs}) + addresses = append(addresses, resolver.Address{ + Addr: addr, + Attributes: attrs, + }) } //sdv.cc.NewAddress(addresses) sdv.cc.UpdateState(resolver.State{ @@ -121,8 +125,7 @@ func (sdv *ServiceDiscovery) Scheme() string { } func (sdv *ServiceDiscovery) ResolveNow(options resolver.ResolveNowOptions) { - sdv.log("resolve now") - sdv.log("resolve now:%v", options) + sdv.log("connecting... %+v",options) return } @@ -136,5 +139,5 @@ func (sdv *ServiceDiscovery) log(s string, args ...interface{}) { if !strings.HasSuffix(s, "\n") { s = s + "\n" } - fmt.Printf(s, args...) + log.Printf(s, args...) } diff --git a/src/v1/clients/grpc/client.go b/src/v1/clients/grpc/client.go index 9ce5b06..05fb9d7 100644 --- a/src/v1/clients/grpc/client.go +++ b/src/v1/clients/grpc/client.go @@ -14,12 +14,13 @@ import ( type RemoteOption func(*RemoteConn) error type RemoteConn struct { + name string addr string balanceName string connTimeout int64 } -func NewRemoteConn(addr string, options ...RemoteOption) (*grpc.ClientConn, error) { +func NewRemoteConn(name string, addr string, options ...RemoteOption) (*grpc.ClientConn, error) { defer func() { if err := recover(); err != nil { @@ -27,6 +28,7 @@ func NewRemoteConn(addr string, options ...RemoteOption) (*grpc.ClientConn, erro } }() rConn := &RemoteConn{ + name: name, addr: addr, balanceName: "round_robin", connTimeout: 10, @@ -59,9 +61,12 @@ func OptConnTimeout(d int64) RemoteOption { } } -func OptEtcdDiscovery(name, addr string) RemoteOption { - +func OptEtcdDiscovery(addr string) RemoteOption { return func(conn *RemoteConn) error { + if addr == "" { + addr = conn.addr + } + d, err := v1etcd.NewServiceDiscovery(addr, 5) if err != nil { return err @@ -69,9 +74,9 @@ func OptEtcdDiscovery(name, addr string) RemoteOption { resolver.Register(d) b := &WeightBalance{} - balancer.Register(base.NewBalancerBuilder(b.Name(), b, base.Config{HealthCheck: true}), ) + balancer.Register(base.NewBalancerBuilder(b.Name(), b, base.Config{HealthCheck: true})) - conn.addr = fmt.Sprintf("%s://8.8.8.8/%s", d.Scheme(), name) + conn.addr = fmt.Sprintf("%s://8.8.8.8/%s", d.Scheme(), conn.name) conn.balanceName = b.Name() return nil } diff --git a/src/v1/clients/grpc/weight_balance.go b/src/v1/clients/grpc/weight_balance.go index 1e0091b..facd056 100644 --- a/src/v1/clients/grpc/weight_balance.go +++ b/src/v1/clients/grpc/weight_balance.go @@ -1,9 +1,9 @@ package grpc import ( - "fmt" "google.golang.org/grpc/balancer" "google.golang.org/grpc/balancer/base" + "log" "sync" ) @@ -24,7 +24,9 @@ func (b *WeightBalance) Build(info base.PickerBuildInfo) balancer.Picker { conns := []balancer.SubConn{} weights := []int64{} + i := 0 for subConn, subInfo := range info.ReadySCs { + i++ conns = append(conns, subConn) //fmt.Println("subConn", subConn) @@ -41,7 +43,7 @@ func (b *WeightBalance) Build(info base.PickerBuildInfo) balancer.Picker { w = 1 } - fmt.Println("weight", w) + log.Printf("rpc discovery %d: %s ,%d", i, subInfo.Address.Addr, weight) weights = append(weights, w) } b.mu.Lock() @@ -69,4 +71,3 @@ func (b *WeightBalance) Pick(info balancer.PickInfo) (balancer.PickResult, error func (b *WeightBalance) Name() string { return "my_weight_round" } - diff --git a/src/v1/config/db.go b/src/v1/config/db.go index 607f8ff..7265d3e 100644 --- a/src/v1/config/db.go +++ b/src/v1/config/db.go @@ -7,9 +7,9 @@ type DBConfig struct { DbPassword string `yaml:"DbPassword"` DbName string `yaml:"DbName"` - MaxIdleConns int `default:"0" yaml:"MaxIdleConns"` //预留并发链接数 - MaxOpenConns int `default:"0" yaml:"MaxOpenConns"` //最大支持链接 - MaxLifetime int `default:"0" yaml:"ConnMaxLifetime"` //每个链接最大生存时间 - MaxIdleTime int `default:"0" yaml:"ConnMaxIdleTime"` //每个链接最大空闲时间 - MaxConcatLen string `default:"0" yaml:"MaxConcatLen"` + MaxIdleConns int `default:"0" yaml:"MaxIdleConns"` //预留并发链接数 + MaxOpenConns int `default:"0" yaml:"MaxOpenConns"` //最大支持链接 + MaxLifetime int `default:"0" yaml:"ConnMaxLifetime"` //每个链接最大生存时间 + MaxIdleTime int `default:"0" yaml:"ConnMaxIdleTime"` //每个链接最大空闲时间 + MaxConcatLen string `default:"" yaml:"MaxConcatLen"` } diff --git a/src/v1/config/rpc.go b/src/v1/config/rpc.go new file mode 100644 index 0000000..f1a0c37 --- /dev/null +++ b/src/v1/config/rpc.go @@ -0,0 +1,20 @@ +package config + +const RpcByNone = "none" +const RpcByEtcd = "etcd" + +//服务端rpc配置 +type RpcServerConfig struct { + RpcLisAddr string `yaml:"RpcLisAddr"` + RpcRegWay string `yaml:"RpcRegister"` //服务注册方式:none/etcd + RpcRegServer string `yaml:"RpcRegServer"` + + RpcRequestIp string `yaml:"RpcRequestIp"` + RpcRequestPort string `yaml:"RpcRequestPort"` +} + +//客户端rpc配置 +type RpcClientConfig struct { + RpcDisWay string `yaml:"RpcDisWay"` //服务发现方式:none/etcd + RpcDisServer string `yaml:"RpcDisServer"` +} diff --git a/src/v1/grpcserver/server_grpc.go b/src/v1/grpcserver/server_grpc.go index e3b0611..cd33703 100644 --- a/src/v1/grpcserver/server_grpc.go +++ b/src/v1/grpcserver/server_grpc.go @@ -5,6 +5,7 @@ import ( "google.golang.org/grpc" "log" "net" + "strings" ) type HandlerFunc = func(*grpc.Server) @@ -21,16 +22,24 @@ type GRPCServer struct { RequestPort string } -func NewGRPCServer(name string, addr string, ) (*GRPCServer, error) { - return &GRPCServer{ +func NewGRPCServer(name string, addr string, ops ...ServerOps) (*GRPCServer, error) { + server := &GRPCServer{ name: name, listenAddr: addr, s: grpc.NewServer(), - }, nil + } + + for i, _ := range ops { + ops[i](server) + } + + return server, nil } func (svr *GRPCServer) AddServiceRegister(r IServiceRegister) { - svr.serviceRegister = r + if r != nil { + svr.serviceRegister = r + } } func (svr *GRPCServer) Run() error { @@ -71,9 +80,14 @@ func (svr *GRPCServer) registerService() error { return err } } + if RequestPort == "" { + RequestPort = strings.Split(svr.listenAddr, ":")[1] + } if svr.serviceRegister != nil { - return svr.serviceRegister.Register(svr.name, RequestIp+":"+RequestPort) + regServer := RequestIp + ":" + RequestPort + log.Printf("[%s]rpc register addr %s\n", svr.name, regServer) + return svr.serviceRegister.Register(svr.name, regServer) } return nil diff --git a/src/v1/grpcserver/server_grpc_dis.go b/src/v1/grpcserver/server_grpc_dis.go index 1f2baf1..d76bf39 100644 --- a/src/v1/grpcserver/server_grpc_dis.go +++ b/src/v1/grpcserver/server_grpc_dis.go @@ -1,7 +1,11 @@ package grpcserver - //服务发现者 接口 -type IServiceDiscovery interface{ - +type IServiceDiscovery interface { + Discovery() +} + +//服务注册者 接口 +type IServiceRegister interface { + Register(name string, addr string) error } diff --git a/src/v1/grpcserver/server_grpc_opt.go b/src/v1/grpcserver/server_grpc_opt.go new file mode 100644 index 0000000..eecb904 --- /dev/null +++ b/src/v1/grpcserver/server_grpc_opt.go @@ -0,0 +1,22 @@ +package grpcserver + +type ServerOps = func(*GRPCServer) + +var WithOpsRequestIp = func(ip string) ServerOps { + return func(server *GRPCServer) { + server.RequestIp = ip + } +} + +var WithOpsRequestPort = func(port string) ServerOps { + return func(server *GRPCServer) { + server.RequestPort = port + } +} + +var WithOpsHandler = func(h HandlerFunc) ServerOps { + return func(server *GRPCServer) { + server.HandlerFunc = h + } +} + diff --git a/src/v1/grpcserver/server_grpc_reg.go b/src/v1/grpcserver/server_grpc_reg.go deleted file mode 100644 index 3d25d27..0000000 --- a/src/v1/grpcserver/server_grpc_reg.go +++ /dev/null @@ -1,7 +0,0 @@ -package grpcserver - - -//服务注册者 接口 -type IServiceRegister interface{ - Register(name string,addr string) error -} -- Gitee From 9014a32905b1d71acce27fe4d06b1271962509c6 Mon Sep 17 00:00:00 2001 From: Sage <1010309281@qq.com> Date: Fri, 5 Nov 2021 10:34:56 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/run_grpc/client_grpc.go | 11 ++++++++--- examples/run_grpc/server_grpc.go | 12 +++++++----- src/v1/config/rpc.go | 28 +++++++++++++++++----------- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/examples/run_grpc/client_grpc.go b/examples/run_grpc/client_grpc.go index 2625dfe..e76ea50 100644 --- a/examples/run_grpc/client_grpc.go +++ b/examples/run_grpc/client_grpc.go @@ -18,18 +18,23 @@ func main() { logger := v1log.NewZapLog("example", logPath, nil) c := v1config.RpcClientConfig{ + RpcWay: "grpc", + RpcAddr: "127.0.0.1:40001", // RpcDisWay=none 时直连rpc RpcDisWay: "etcd", RpcDisServer: "127.0.0.1:2379", + RpcTimeout: 3, } opts := []v1clientrpc.RemoteOption{} switch c.RpcDisWay { - case v1config.RpcByEtcd: - opts = append(opts, v1clientrpc.OptEtcdDiscovery(c.RpcDisServer)) + case v1config.RpcRegByEtcd: + opts = append(opts, + v1clientrpc.OptEtcdDiscovery(c.RpcDisServer), + v1clientrpc.OptConnTimeout(c.RpcTimeout)) } - conn, err := v1clientrpc.NewRemoteConn("admin","", opts...) + conn, err := v1clientrpc.NewRemoteConn("admin", c.RpcAddr, opts...) if err != nil { logger.Error("new remote conn err:%s", err) return diff --git a/examples/run_grpc/server_grpc.go b/examples/run_grpc/server_grpc.go index f4ab6cc..c00fcbb 100644 --- a/examples/run_grpc/server_grpc.go +++ b/examples/run_grpc/server_grpc.go @@ -25,27 +25,29 @@ func main() { logPath := fmt.Sprintf("./runtime/logs/%s.log", filepath.Base(os.Args[0])) logger := v1log.NewZapLog("example", logPath, nil) - c := v1config.RpcServerConfig{ + c := v1config.GRpcServerConfig{ RpcLisAddr: ":" + port, RpcRegWay: "etcd", RpcRegServer: "0.0.0.0:2379", - RpcRequestIp: "127.0.0.1", } + requestIp:="127.0.0.1" + rpcPort:="" + server, err := v1rpc.NewGRPCServer("admin", c.RpcLisAddr, v1rpc.WithOpsHandler(func(server *grpc.Server) { s := NewDemoServer() pb.RegisterUserSrServer(server, s) }), - v1rpc.WithOpsRequestIp(c.RpcRequestIp), - v1rpc.WithOpsRequestPort(c.RpcRequestPort), + v1rpc.WithOpsRequestIp(requestIp), + v1rpc.WithOpsRequestPort(rpcPort), ) if err != nil { logger.Error("run server error:%s" + err.Error()) return } switch c.RpcRegWay { - case v1config.RpcByEtcd: + case v1config.RpcRegByEtcd: etcd, _ := v1rpc.NewEtcdSrvRegister(c.RpcRegServer) server.AddServiceRegister(etcd) } diff --git a/src/v1/config/rpc.go b/src/v1/config/rpc.go index f1a0c37..603c4d2 100644 --- a/src/v1/config/rpc.go +++ b/src/v1/config/rpc.go @@ -1,20 +1,26 @@ package config -const RpcByNone = "none" -const RpcByEtcd = "etcd" +// rpc注册方式 +const RpcRegByNone = "none" +const RpcRegByEtcd = "etcd" -//服务端rpc配置 -type RpcServerConfig struct { - RpcLisAddr string `yaml:"RpcLisAddr"` - RpcRegWay string `yaml:"RpcRegister"` //服务注册方式:none/etcd - RpcRegServer string `yaml:"RpcRegServer"` +// rpc 请求方式 +const RpcByHttp = "http" +const RpcByGRpc = "grpc" - RpcRequestIp string `yaml:"RpcRequestIp"` - RpcRequestPort string `yaml:"RpcRequestPort"` +//服务端grpc配置 +type GRpcServerConfig struct { + RpcLisAddr string `yaml:"RpcLisAddr"` //grpc启动端口,如 ":4001" + RpcRegWay string `yaml:"RpcRegister"` //服务注册方式:none/etcd + RpcRegServer string `yaml:"RpcRegServer"` //服务注册服务端地址,如etcd地址 } //客户端rpc配置 type RpcClientConfig struct { - RpcDisWay string `yaml:"RpcDisWay"` //服务发现方式:none/etcd - RpcDisServer string `yaml:"RpcDisServer"` + RpcWay string `yaml:"RpcWay"` //rpc服务方式 + RpcTimeout int64 `yaml:"RpcTimeout"` //rpc超时时间,单位:秒 + RpcAddr string `yaml:"RpcAddr"` //rpc请求地址 + + RpcDisWay string `yaml:"RpcDisWay"` //服务发现方式:none/etcd + RpcDisServer string `yaml:"RpcDisServer"` //服务发现服务端地址,如etcd地址 } -- Gitee From 2f37e38b814263ad6e7e2dd744dda78a769bd157 Mon Sep 17 00:00:00 2001 From: Sage <1010309281@qq.com> Date: Fri, 5 Nov 2021 11:29:08 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/config/rpc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v1/config/rpc.go b/src/v1/config/rpc.go index 603c4d2..9b0c774 100644 --- a/src/v1/config/rpc.go +++ b/src/v1/config/rpc.go @@ -11,7 +11,7 @@ const RpcByGRpc = "grpc" //服务端grpc配置 type GRpcServerConfig struct { RpcLisAddr string `yaml:"RpcLisAddr"` //grpc启动端口,如 ":4001" - RpcRegWay string `yaml:"RpcRegister"` //服务注册方式:none/etcd + RpcRegWay string `yaml:"RpcRegWay"` //服务注册方式:none/etcd RpcRegServer string `yaml:"RpcRegServer"` //服务注册服务端地址,如etcd地址 } -- Gitee