فهرست منبع

wip:first submit

wangkaiyue 3 سال پیش
والد
کامیت
84a038b42a
15فایلهای تغییر یافته به همراه263 افزوده شده و 282 حذف شده
  1. 46 0
      Dockerfile
  2. 0 0
      README.md
  3. 40 0
      core/logs/logs.go
  4. 61 0
      core/logs/struct.go
  5. 10 0
      entrypoint.sh
  6. 21 0
      etc/config.yaml
  7. 7 4
      go.mod
  8. 17 9
      go.sum
  9. 0 51
      hellowrold/main.go
  10. 61 0
      main.go
  11. 0 50
      node.go
  12. 0 38
      node_test.go
  13. 0 56
      register.go
  14. 0 25
      scheme.go
  15. 0 49
      watcher.go

+ 46 - 0
Dockerfile

@@ -0,0 +1,46 @@
+# syntax=docker/dockerfile:1
+FROM  golang:1.17-alpine as builder
+
+#RUN apk --no-cache --no-progress add git
+RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.6/main/\nhttps://mirrors.aliyun.com/alpine/v3.6/community/' > /etc/apk/repositories && \
+    apk update && \
+    apk upgrade && \
+    apk add --no-cache git
+
+
+# 设置go环境变量
+RUN go env -w GOPROXY=https://goproxy.cn,direct;
+RUN go env -w GOPRIVATE=bp.jydev.jianyu360.cn,app.yhyue.com # 设置私有镜像仓库
+
+# 创建工作区
+WORKDIR /workspace
+
+# 复制编译需要的文件
+COPY go.mod go.mod
+COPY go.sum go.sum
+COPY core/ core/
+COPY main.go main.go
+
+# 执行 go build   从./cmd/user/server.go  输出到 ./app 可执行文件
+# 最终 app 可执行文件 路径 为  /workspace/app
+# ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.3.207 bp.jydev.jianyu360.cn >> /etc/hosts && echo 192.168.3.207 app.yhyue.com >> /etc/hosts && cat /etc/hosts"]
+
+# 构建程序
+RUN CGO_ENABLED=0   go build -a -o app
+
+# ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.3.207 bp.jydev.jianyu360.cn >> /etc/hosts && echo 192.168.3.207 app.yhyue.com >> /etc/hosts && cat /etc/hosts &&  go build -a -o app && ./workspace/app "]
+
+# 多段编译
+FROM  alpine
+# cd 到 / 目录
+WORKDIR /runspace
+# 复制配置文件夹
+COPY etc/ etc/
+# 把builder 阶段 的 成功 /workspace/app 可执行文件 复制到 当前目录来 (/workspace)
+COPY --from=builder /workspace/app .
+## 暴露容器端口
+EXPOSE 8077
+#执行  /app 命令  运行 app 启动服务
+ENTRYPOINT ["/app"]
+
+

+ 0 - 0
README.md


+ 40 - 0
core/logs/logs.go

@@ -0,0 +1,40 @@
+package logs
+
+import (
+	"github.com/gogf/gf/v2/os/gcfg"
+	"github.com/gogf/gf/v2/os/gctx"
+	"github.com/gogf/gf/v2/os/glog"
+	"log"
+)
+
+var GInfo *glog.Logger // 系统日志输出
+var GReq *serverLog
+
+func InitLogs() {
+	ctx := gctx.New()
+	logCommon := &commonLogConfig{
+		Path:   gcfg.Instance().MustGet(ctx, "system.log.path", "./logs").String(),
+		Debug:  gcfg.Instance().MustGet(ctx, "system.log.debug", false).Bool(),
+		Stdout: gcfg.Instance().MustGet(ctx, "system.log.stdout", false).Bool(),
+	}
+	//初始化GInfo
+	gInfoName := gcfg.Instance().MustGet(ctx, "system.log.pattern", "system-{Ymd}.log").String()
+	GInfo = initBaseLog(logCommon, gInfoName)
+	//设置系统默认日志
+	glog.SetDefaultLogger(GInfo)
+	//将log输出转至GInfo
+	log.SetOutput(GInfo)
+
+	//初始化请求记录
+	GReq = initServerLog(serverLogConfig{
+		commonLogConfig:        logCommon,
+		ServerErrorStack:       gcfg.Instance().MustGet(ctx, "system.log.serverErrorStack", false).Bool(),
+		ServerRequestLogSaveDb: gcfg.Instance().MustGet(ctx, "system.log.serverRequestLogSaveDb", false).Bool(),
+		ServerErrorLogEnabled:  gcfg.Instance().MustGet(ctx, "system.log.serverErrorLogEnabled", false).Bool(),
+		ServerErrorLogPattern:  gcfg.Instance().MustGet(ctx, "system.log.serverErrorLogPattern", "system-{Ymd}.log").String(),
+		ServerAccessLogEnabled: gcfg.Instance().MustGet(ctx, "system.log.serverAccessLogEnabled", false).Bool(),
+		ServerAccessLogPattern: gcfg.Instance().MustGet(ctx, "system.log.serverAccessLogPattern", "system-{Ymd}.log").String(),
+		ServerRequestTimeout:   gcfg.Instance().MustGet(ctx, "system.log.serverRequestTimeout", 500).Int64(),
+	})
+
+}

+ 61 - 0
core/logs/struct.go

@@ -0,0 +1,61 @@
+package logs
+
+import (
+	"github.com/gogf/gf/v2/os/glog"
+)
+
+type commonLogConfig struct {
+	Path   string //系统日志默认文件默认报错路径。默认为./logs
+	Debug  bool   //是否打印调试信息。默认false
+	Stdout bool   //是否输出到控制台。默认false
+}
+
+func initBaseLog(c *commonLogConfig, fileName string) (l *glog.Logger) {
+	l = glog.New()
+	_ = l.SetPath(c.Path)
+	l.SetFile(fileName)
+	l.SetDebug(c.Debug)
+	l.SetStdoutPrint(c.Stdout)
+	return
+}
+
+// 请求记录配置
+type serverLogConfig struct {
+	*commonLogConfig
+	ServerErrorStack       bool   //当Server捕获到异常时是否记录堆栈信息到日志中。默认为true
+	ServerRequestLogSaveDb bool   //请求日志是否保存至数据库。默认false
+	ServerErrorLogEnabled  bool   //是否记录访问异常日志到日志中。默认为true
+	ServerErrorLogPattern  string //访问异常日志文件格式。默认为"error-{Ymd}.log"
+	ServerAccessLogEnabled bool   //是否记录访问日志。默认为false
+	ServerAccessLogPattern string //记录访问日志文件格式。默认为"access-{Ymd}.log"
+	ServerRequestTimeout   int64
+}
+
+// server 请求日志
+type serverLog struct {
+	accessLog, errorLog *glog.Logger
+	Config              serverLogConfig
+}
+
+func initServerLog(sc serverLogConfig) *serverLog {
+	accessLog, errorLog := glog.New(), glog.New()
+	_ = accessLog.SetPath(sc.Path)
+	_ = errorLog.SetPath(sc.Path)
+
+	accessLog.SetFile(sc.ServerAccessLogPattern)
+	errorLog.SetFile(sc.ServerErrorLogPattern)
+
+	accessLog.SetDebug(sc.Debug)
+	errorLog.SetDebug(sc.Debug)
+
+	accessLog.SetStdoutPrint(sc.Stdout)
+	errorLog.SetStdoutPrint(sc.Stdout)
+
+	slog := &serverLog{
+		accessLog: accessLog,
+		errorLog:  errorLog,
+		Config:    sc,
+	}
+
+	return slog
+}

+ 10 - 0
entrypoint.sh

@@ -0,0 +1,10 @@
+# 向hosts文件追加内容
+#cat /data/myhosts >> /etc/hosts
+#echo "192.168.3.207 app.yhyue.com"  >> /etc/hosts
+#echo "192.168.3.207 bp.jydev.jianyu360.cn"  >> /etc/hosts
+# 其他命令
+
+# 保留终端,防止容器自动退出
+#/bin/sh
+
+su - root -c "env | grep DNS | akw -F "=" '{print $2}' >> /etc/hosts"

+ 21 - 0
etc/config.yaml

@@ -0,0 +1,21 @@
+# 系统配置
+system:
+  serverCode: this is k3s demo
+  serverPort: 8077
+  response: this is k3s server1
+  # 监听服务注册etcd配置
+  etcdListen:
+    - 192.168.3.206:2379
+
+  log:
+    path: ./logs                                # 系统日志默认文件默认报错路径。默认为./logs
+    debug: false                                # 是否打印调试信息。默认false
+    stdout: true                                # 是否输出到控制台。默认false
+    systemLogPattern: system-{Ymd}.log          # 日志文件格式。默认为"system-{Ymd}.log"
+    serverErrorStack: false                     # 当Server捕获到异常时是否记录堆栈信息到日志中。默认为true
+    serverRequestLogSaveDb: true                # 请求日志是否保存至数据库。默认false
+    serverErrorLogEnabled: true                 # 是否记录异常日志信息到日志中。默认为true
+    serverErrorLogPattern: error-{Ymd}.log      # 异常错误日志文件格式。默认为"error-{Ymd}.log"
+    serverAccessLogEnabled: true                # 是否记录访问日志。默认为false
+    serverAccessLogPattern: access-{Ymd}.log    # 访问日志文件格式。默认为"access-{Ymd}.log"
+    serverRequestTimeout: 2000                  # 接口请求超时通知,若注册表中无配置超时提醒使用此配置。默认500毫秒

+ 7 - 4
go.mod

@@ -3,9 +3,10 @@ module bp.jydev.jianyu360.cn/BaseService/gateway_node
 go 1.18
 
 require (
-	app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186
+	app.yhyue.com/moapp/jybase v0.0.0-20220527072924-4ef326ea480d
+	bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220505015640-56e56f06bc5c
 	github.com/gogf/gf/v2 v2.0.6
-	go.etcd.io/etcd/client/v3 v3.5.4
+	github.com/gogf/guuid v1.0.0
 )
 
 require (
@@ -23,6 +24,7 @@ require (
 	github.com/go-sql-driver/mysql v1.6.0 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/google/uuid v1.3.0 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/grokify/html-strip-tags-go v0.0.1 // indirect
 	github.com/longbridgeapp/sqlparser v0.3.1 // indirect
@@ -31,8 +33,9 @@ require (
 	github.com/mattn/go-runewidth v0.0.13 // indirect
 	github.com/olekukonko/tablewriter v0.0.5 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
-	go.etcd.io/etcd/api/v3 v3.5.4 // indirect
-	go.etcd.io/etcd/client/pkg/v3 v3.5.4 // indirect
+	go.etcd.io/etcd/api/v3 v3.5.2 // indirect
+	go.etcd.io/etcd/client/pkg/v3 v3.5.2 // indirect
+	go.etcd.io/etcd/client/v3 v3.5.2 // indirect
 	go.opentelemetry.io/otel v1.3.0 // indirect
 	go.opentelemetry.io/otel/sdk v1.3.0 // indirect
 	go.opentelemetry.io/otel/trace v1.3.0 // indirect

+ 17 - 9
go.sum

@@ -3,8 +3,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20220415064050-37ce64b3e2d4/go.mod h1:qNRA0sHu
 app.yhyue.com/moapp/jybase v0.0.0-20220418104200-46c3fff161c7/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20220420032112-668025915ee4/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20220421060131-a1001013ba46/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
-app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186 h1:2AG+jLpFWFjhtdJHGb6xrRIFtQVHWrMyj2F71DBUozM=
-app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
+app.yhyue.com/moapp/jybase v0.0.0-20220527072924-4ef326ea480d h1:wxmwxOSkIyVeKuFqLzqFdjZKJ+hAdu+7qd0xlBs+lAw=
+app.yhyue.com/moapp/jybase v0.0.0-20220527072924-4ef326ea480d/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=
 bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220419090715-88ddb32961be/go.mod h1:Yj4oabIGItuMoF0BXYLz2XAnF581kxgXBrvlUtIJrkI=
 bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220505015640-56e56f06bc5c h1:p2WctRqfE6wdLPHnACIO983CfYV2LLaaLC2ADpSaNn0=
@@ -91,6 +91,7 @@ github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
 github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E=
 github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
@@ -206,8 +207,12 @@ github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGt
 github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
 github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogf/gf v1.12.3 h1:71arUxK76Fr8tlbt3NcVKbWHnn0PBrLoAj8Fk06CmPM=
+github.com/gogf/gf v1.12.3/go.mod h1:toXfwdoKLjTZXhaQL3c5o4EZuzsFABratQvGyu5A/6w=
 github.com/gogf/gf/v2 v2.0.6 h1:2etb4FMpbQKWIJO+UjtIWrZUp01HUsFb6Po8pgizAWk=
 github.com/gogf/gf/v2 v2.0.6/go.mod h1:8uYzw7qNzuq8vrhVlWke1b1925FFqOJIgmyYW1sr/0M=
+github.com/gogf/guuid v1.0.0 h1:tUB0VKMcFmbIrteVjRAEvoxXX7vQNOA6DMf1ub9xli8=
+github.com/gogf/guuid v1.0.0/go.mod h1:weuAJZ9kkvXmvYgQKitT0RdX0l+94D0eFf5NoJxDRFI=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
@@ -243,6 +248,7 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -273,6 +279,7 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
 github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
@@ -280,9 +287,13 @@ github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3i
 github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
 github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
 github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
+github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
 github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gqcn/structs v1.1.1 h1:cyzGRwfmn3d1d54fwW3KUNyG9QxR0ldIeqwFGeBt638=
+github.com/gqcn/structs v1.1.1/go.mod h1:/aBhTBSsKQ2Ec9pbnYdGphtdWXHFn4KrCL0fXM/Adok=
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/grokify/html-strip-tags-go v0.0.0-20190921062105-daaa06bf1aaf/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
 github.com/grokify/html-strip-tags-go v0.0.1 h1:0fThFwLbW7P/kOiTBs03FsJSV9RM2M/Q/MOnCQxKMo0=
 github.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
@@ -376,6 +387,7 @@ github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQT
 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
 github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
+github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
 github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
 github.com/olivere/elastic v6.2.37+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
@@ -410,7 +422,6 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
 github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
 github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -475,15 +486,12 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA=
 github.com/zeromicro/go-zero v1.3.2/go.mod h1:DEj3Fwj1Ui1ltsgf6YqwTL9nD4+tYzIRX0c1pWtQo1E=
+go.etcd.io/etcd/api/v3 v3.5.2 h1:tXok5yLlKyuQ/SXSjtqHc4uzNaMqZi2XsoSPr/LlJXI=
 go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
-go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc=
-go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
+go.etcd.io/etcd/client/pkg/v3 v3.5.2 h1:4hzqQ6hIb3blLyQ8usCU4h3NghkqcsohEQ3o3VetYxE=
 go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
-go.etcd.io/etcd/client/pkg/v3 v3.5.4 h1:lrneYvz923dvC14R54XcA7FXoZ3mlGZAgmwhfm7HqOg=
-go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
+go.etcd.io/etcd/client/v3 v3.5.2 h1:WdnejrUtQC4nCxK0/dLTMqKOB+U5TP/2Ya0BJL+1otA=
 go.etcd.io/etcd/client/v3 v3.5.2/go.mod h1:kOOaWFFgHygyT0WlSmL8TJiXmMysO/nNUlEsSsN6W4o=
-go.etcd.io/etcd/client/v3 v3.5.4 h1:p83BUL3tAYS0OT/r0qglgc3M1JjhM0diV8DSWAhVXv4=
-go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
 go.mongodb.org/mongo-driver v1.5.0/go.mod h1:boiGPFqyBs5R0R5qf2ErokGRekMfwn+MqKaUyHs7wy0=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=

+ 0 - 51
hellowrold/main.go

@@ -1,51 +0,0 @@
-package main
-
-import (
-	"bp.jydev.jianyu360.cn/BaseService/gateway_node"
-	"fmt"
-	"github.com/gogf/gf/v2/frame/g"
-	"github.com/gogf/gf/v2/net/ghttp"
-	"os"
-	"os/signal"
-	"syscall"
-)
-
-func main() {
-	//node.NewNode().Register("usermodule", "8888", "http://127.0.0.1")
-
-	var serverCode string = "gatewayDemo"
-	var serverPort int = 8099
-
-	server := g.Server()
-	server.SetPort(serverPort)
-	server.BindHandler("/gatewayDemo/{page}", func(r *ghttp.Request) {
-		r.Response.Write(map[string]interface{}{
-			"code": 1,
-			"func": r.Get("page"),
-			"param": map[string]interface{}{
-				"name": r.Get("name").String(),
-				"age":  r.Get("age").Int64(),
-				"eId":  r.Get("entId").Int64(),
-				"uId":  r.Get("userId").String(),
-			},
-		})
-	})
-
-	//向网关注册表注册服务。此步骤应在服务启动后注册。服务有重试机制不受影响。
-	//NewNode可传入etcd节点,默认http://127.0.0.1:2379
-	closeNotify, err := gateway_node.NewNode().Register(serverCode, fmt.Sprintf("%d", serverPort))
-	if err != nil {
-		panic(err)
-	}
-
-	go func() {
-		server.Run()
-	}()
-
-	//阻塞主进程,接受退出消息。关闭服务,从注册表中删除。
-	//kill -9 信号接受不到,会有2~3秒延迟。服务有重试机制不受影响。
-	quit := make(chan os.Signal, 1)
-	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
-	<-quit
-	closeNotify()
-}

+ 61 - 0
main.go

@@ -0,0 +1,61 @@
+package main
+
+import (
+	"app.yhyue.com/moapp/jybase/iputil"
+	"bp.jydev.jianyu360.cn/BaseService/gateway/core/node"
+	"bp.jydev.jianyu360.cn/BaseService/gateway_node/core/logs"
+	"fmt"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/os/gcfg"
+	"github.com/gogf/gf/v2/os/gctx"
+	"github.com/gogf/guuid"
+	"os"
+	"os/signal"
+	"syscall"
+	"time"
+)
+
+func init() {
+	g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("./etc/config.yaml") //设置配置文件
+	logs.InitLogs()
+}
+
+func main() {
+	var serverCode string = gcfg.Instance().MustGet(gctx.New(), "system.serverCode").String()
+	var serverPort int = gcfg.Instance().MustGet(gctx.New(), "system.serverPort").Int()
+	etcdNodes := gcfg.Instance().MustGet(gctx.New(), "system.etcdListen").Strings()
+	server := g.Server()
+	server.SetPort(serverPort)
+	server.SetLogger(logs.GInfo)
+	server.SetAccessLogEnabled(true)
+	server.BindHandler("/k3s-demo/{page}", func(r *ghttp.Request) {
+		content := fmt.Sprintf("%s %d", gcfg.Instance().MustGet(gctx.New(), "system.response").Strings(), time.Now().Unix())
+		logs.GInfo.Info(gctx.New(), content)
+		r.Response.WriteJson(map[string]interface{}{
+			"Hostname": r.Request.Host,
+			"Ip":       r.GetRemoteIp(),
+			"Method":   r.Method,
+			"ServerIp": iputil.InternalIp(),
+			"uuid":     guuid.New().String(),
+			"content":  content,
+		})
+	})
+	//向网关注册表注册服务。此步骤应在服务启动后注册。服务有重试机制不受影响。
+	//NewNode可传入etcd节点,默认http://127.0.0.1:2379
+	closeNotify, err := node.NewNode(etcdNodes...).Register(serverCode, fmt.Sprintf("%d", serverPort))
+	if err != nil {
+		panic(err)
+	}
+
+	go func() {
+		server.Run()
+	}()
+
+	//阻塞主进程,接受退出消息。关闭服务,从注册表中删除。
+	//kill -9 信号接受不到,会有2~3秒延迟。服务有重试机制不受影响。
+	quit := make(chan os.Signal, 1)
+	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
+	<-quit
+	closeNotify()
+}

+ 0 - 50
node.go

@@ -1,50 +0,0 @@
-package gateway_node
-
-import (
-	client "go.etcd.io/etcd/client/v3"
-	"log"
-	"time"
-)
-
-var (
-	defaultEndpoints   = []string{"http://127.0.0.1:2379"}
-	defaultDialTimeout = 5
-)
-
-type Node struct {
-	scheme string //
-	ip     string //节点ip
-	Client *client.Client
-}
-
-// NewNode 快速创建节点
-func NewNode(endpoints ...string) *Node {
-	if len(endpoints) == 0 {
-		endpoints = defaultEndpoints
-	}
-	// etcd 配置
-	defaultConfig := client.Config{
-		Endpoints:   endpoints,
-		DialTimeout: time.Duration(defaultDialTimeout) * time.Second,
-	}
-	return NewNodeWithConfig(defaultConfig)
-}
-
-// NewNodeWithConfig 根据全量配置文件创建节点
-func NewNodeWithConfig(conf client.Config) *Node {
-	// 创建 etcd 客户端
-	etcdClient, err := client.New(conf)
-	if err != nil {
-		log.Fatal("Error: cannot connect to etcd: ", err)
-	}
-	return &Node{
-		Client: etcdClient,
-		scheme: defaultScheme,
-	}
-}
-
-// SetScheme 设置节点注册、监听scheme
-// 禁止在node Register后 或 NewWatcher 后修改
-func (n *Node) SetScheme(scheme string) {
-	n.scheme = scheme
-}

+ 0 - 38
node_test.go

@@ -1,38 +0,0 @@
-package gateway_node
-
-import (
-	"fmt"
-	"github.com/gogf/gf/v2/frame/g"
-	"github.com/gogf/gf/v2/net/ghttp"
-	"os"
-	"os/signal"
-	"syscall"
-	"testing"
-)
-
-// TestServerNodeRegister测试服务注册
-func TestServerNodeRegister(t *testing.T) {
-	var serverCode string = "gatewayDemo"
-	var serverPort int = 8099
-	closeNotify, err := NewNode().Register(serverCode, fmt.Sprintf("%d", serverPort))
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	go func() {
-		server := g.Server()
-		server.SetPort(serverPort)
-		server.BindHandler("POST:/gatewayDemo/{page}", func(r *ghttp.Request) {
-			r.Response.Write(map[string]interface{}{
-				"code": 1,
-				"func": r.Get("page"),
-			})
-		})
-		server.Run()
-	}()
-
-	quit := make(chan os.Signal, 1)
-	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
-	<-quit
-	closeNotify()
-}

+ 0 - 56
register.go

@@ -1,56 +0,0 @@
-package gateway_node
-
-import (
-	"app.yhyue.com/moapp/jybase/iputil"
-	"context"
-	"fmt"
-	client "go.etcd.io/etcd/client/v3"
-	"log"
-	"time"
-)
-
-// Register 注册服务
-func (n *Node) Register(serverCode string, serverPort string, serverIp ...string) (func(), error) {
-	return n.RegisterWithContext(context.Background(), serverCode, serverPort, serverIp...)
-}
-
-// RegisterWithContext 注册服务
-func (n *Node) RegisterWithContext(ctx context.Context, serverCode string, serverPort string, domain ...string) (func(), error) {
-	var err error
-	var serverAddr string
-
-	if len(domain) > 0 {
-		serverAddr = domain[0]
-	} else {
-		serverAddr = fmt.Sprintf("http://%s", iputil.InternalIp())
-	}
-	//创建租约
-	lease, err := n.Client.Grant(ctx, 5)
-	if err != nil {
-		return nil, err
-	}
-	//像etcd注册服务
-	finalAddr := serverAddr
-	if serverPort != "" {
-		finalAddr = fmt.Sprintf("%s:%s", serverAddr, serverPort)
-	}
-	key := createServerRegisterKey(n.scheme, serverCode, finalAddr)
-	_, err = n.Client.Put(ctx, key, time.Now().Format(""), client.WithLease(lease.ID))
-	if err != nil {
-		return nil, err
-	}
-	log.Printf("service registed gateway for %s success!\n", key)
-	//续租约
-	keepAlive, err := n.Client.KeepAlive(ctx, lease.ID)
-	if err != nil {
-		return nil, err
-	}
-	go func() {
-		for {
-			<-keepAlive
-		}
-	}()
-	return func() {
-		_, _ = n.Client.Revoke(ctx, lease.ID)
-	}, nil
-}

+ 0 - 25
scheme.go

@@ -1,25 +0,0 @@
-package gateway_node
-
-import (
-	"fmt"
-	"regexp"
-)
-
-const defaultScheme = "etcd:///com.gateway"
-
-var findServerCodeRegexp = regexp.MustCompile(`.*/(.*)@(.*)`)
-
-// createServerRegisterKey 创建ectd注册key内容
-func createServerRegisterKey(scheme, serverCode, serverAddr string) string {
-	return fmt.Sprintf("%s/%s@%s", scheme, serverCode, serverAddr)
-}
-
-// getServerCodeFromKey 从etcd ServerRegisterKey中获取服务code
-func getServerCodeFromKey(key string) (serverCode, serverAddr string) {
-	strArr := findServerCodeRegexp.FindStringSubmatch(key)
-	if len(strArr) == 3 {
-		serverCode = strArr[1]
-		serverAddr = strArr[2]
-	}
-	return
-}

+ 0 - 49
watcher.go

@@ -1,49 +0,0 @@
-package gateway_node
-
-import (
-	"context"
-	client "go.etcd.io/etcd/client/v3"
-	"log"
-)
-
-// Resolver 需要获取注册服务内容结构体需要实现的方法
-type Resolver interface {
-	// AddNode 添加节点
-	AddNode(code, server string) error
-	// DelNode 删除节点
-	DelNode(code, server string) error
-}
-
-// NewWatcher 获取节点内容
-func (n *Node) NewWatcher(ctx context.Context, resolver Resolver) {
-	// 获取当前已注册的服务
-	registered, err := n.Client.Get(ctx, n.scheme, client.WithPrefix())
-	if err != nil {
-		log.Printf("NewWatcher 获取已注册服务出错%v", err)
-	}
-	for _, value := range registered.Kvs {
-		serverCode, serverAddr := getServerCodeFromKey(string(value.Key))
-		if addRegisteredErr := resolver.AddNode(serverCode, serverAddr); addRegisteredErr != nil {
-			log.Printf("NewWatcher 添加已存在节点 %s:%s 异常%v", serverCode, serverAddr, addRegisteredErr)
-		}
-	}
-	// 持续监听服务变化
-	for wch := range n.Client.Watch(ctx, n.scheme, client.WithPrefix()) {
-		for _, ev := range wch.Events {
-			//获取服务标识代码及服务地址
-			serverCode, serverAddr := getServerCodeFromKey(string(ev.Kv.Key))
-			var operateErr error
-
-			switch ev.Type {
-			case client.EventTypePut:
-				operateErr = resolver.AddNode(serverCode, serverAddr)
-			case client.EventTypeDelete:
-				operateErr = resolver.DelNode(serverCode, serverAddr)
-			}
-
-			if operateErr != nil {
-				log.Printf("NewWatcher 监听 %v 节点 %s:%s 异常%v", ev.Type, serverCode, serverAddr, operateErr)
-			}
-		}
-	}
-}