diff --git a/BlogAdminService/bootstrap/bootstrap.go b/BlogAdminService/bootstrap/bootstrap.go index 81d967a..a18dd13 100644 --- a/BlogAdminService/bootstrap/bootstrap.go +++ b/BlogAdminService/bootstrap/bootstrap.go @@ -26,15 +26,17 @@ type sqlite struct { } type cloud struct { - ServiceName string `json:"serviceName"` - Address string `json:"address"` - Port string `json:"port"` + ServiceName string `json:"serviceName"` + Host string `json:"host"` + RegisterCenter string `json:"registerCenter"` + RegisterCenterDb int `json:"registerCenterDb"` + Heartbeat int `json:"heartbeat"` } type session struct { Addr string `json:"addr"` Db int `json:"db"` - Timeout int `json:"timeout"` + Expires int `json:"expires"` Password string `json:"password"` Database string `json:"database"` Prefix string `json:"prefix"` diff --git a/BlogAdminService/cloud/DistributedService.go b/BlogAdminService/cloud/DistributedService.go index 0228b4e..17528fa 100644 --- a/BlogAdminService/cloud/DistributedService.go +++ b/BlogAdminService/cloud/DistributedService.go @@ -1,27 +1,50 @@ package cloud import ( + "BlogAdmin/bootstrap" "BlogAdmin/third_party/database" "context" "fmt" "log" "sync" + "time" + + "github.com/redis/go-redis/v9" ) var ( - serviceName string = "BlogAdminService" - host string = "192.168.0.50" - port string = "8081" - countMap sync.Map + // serviceName string = "BlogAdminService" + // host string = "192.168.0.50" + // port string = "8081" + countMap sync.Map ) type distributedService struct { } var DistributedService distributedService +var redisClient *redis.Client +var down bool func init() { - + registerCenter := bootstrap.Config.Cloud.RegisterCenter + db := bootstrap.Config.Cloud.RegisterCenterDb + redisClient = redis.NewClient(&redis.Options{ + Addr: registerCenter, + DB: db, // 默认DB 0 + }) + // RedisTemplate = redis.NewClient(&redis.Options{ + // Addr: "localhost:6379", + // Password: "", // 没有密码,默认值 + // DB: 0, // 默认DB 0 + // }) + ctx := context.Background() + sc := redisClient.Ping(ctx) + pong := sc.Val() + if pong == "PONG" { + log.Println("注册中心Redis连接成功") + // RedisTemplate.FlushAll(ctx) + } } func addReqCount(service string) int64 { @@ -48,11 +71,23 @@ func (*distributedService) Req(service string, url string) { } func (*distributedService) ServiceUp() { + go func() { + log.Println("心跳开始") + ctx := context.Background() + serviceName := bootstrap.Config.Cloud.ServiceName + host := bootstrap.Config.Cloud.Host + heartbeat := bootstrap.Config.Cloud.Heartbeat - ctx := context.Background() - key := fmt.Sprintf("distributed:%v", serviceName) - addr := fmt.Sprintf("%v:%v", host, port) - database.RedisTemplate.SAdd(ctx, key, addr) + for { + if down { + break + } + time.Sleep(time.Second * time.Duration(heartbeat)) + key := fmt.Sprintf("distributed:%v", serviceName) + // addr := fmt.Sprintf("%v:%v", host, port) + redisClient.SAdd(ctx, key, host) + } + }() // keys, _ := database.RedisTemplate.Scan(ctx, 0, keyPerfix, 0).Val() // i := len(keys) @@ -62,8 +97,11 @@ func (*distributedService) ServiceUp() { } func (*distributedService) ServiceDown() { + down = true ctx := context.Background() + serviceName := bootstrap.Config.Cloud.ServiceName + host := bootstrap.Config.Cloud.Host key := fmt.Sprintf("distributed:%v", serviceName) - addr := fmt.Sprintf("%v:%v", host, port) - database.RedisTemplate.SRem(ctx, key, addr) + // addr := fmt.Sprintf("%v:%v", host, port) + redisClient.SRem(ctx, key, host) } diff --git a/BlogAdminService/conf/bootstrap.json b/BlogAdminService/conf/bootstrap.json index 70bf5f3..7d11625 100644 --- a/BlogAdminService/conf/bootstrap.json +++ b/BlogAdminService/conf/bootstrap.json @@ -1,21 +1,22 @@ { "cloud": { "serviceName": "BlogAdminService", + "host": "localhost:8081", "registerCenter": "localhost:6379", - "address": "localhost:8081", - "db": "0" + "registerCenterDb": 0, + "heartbeat": 10 }, "session": { "address": "localhost:6379", "database": "0", "prefix": "iris:session:", - "timeout": 120 + "expires": 10 }, "sqlite": { "path": "./db_blog_admin.db" }, "redis": { "addr": "localhost:6379", - "db": 0 + "db": 1 } } \ No newline at end of file diff --git a/BlogAdminService/main.go b/BlogAdminService/main.go index fe3fa4e..f125b0c 100644 --- a/BlogAdminService/main.go +++ b/BlogAdminService/main.go @@ -55,7 +55,7 @@ func main() { addr := bootstrap.Config.Session.Addr redisDatabase := bootstrap.Config.Session.Database prefix := bootstrap.Config.Session.Prefix - timeout := bootstrap.Config.Session.Timeout + expires := bootstrap.Config.Session.Expires db := redis.New(redis.Config{ Network: "tcp", Addr: addr, @@ -87,7 +87,7 @@ func main() { // using the standard `html/template` package. sess := sessions.New(sessions.Config{ Cookie: "session_id_cookie", - Expires: time.Duration(timeout) * time.Hour, + Expires: time.Duration(expires) * time.Hour, AllowReclaim: true, }) sess.UseDatabase(db) @@ -98,13 +98,13 @@ func main() { ctx.View("index.html") }) - adminApi := app.Party("/") - adminLoginApi := app.Party("/login") - adminArticleApi := app.Party("/article") - adminDinaryApi := app.Party("/diary") - adminVersionApi := app.Party("/version") - adminUserApi := app.Party("/user") - adminFileApi := app.Party("/file") + adminApi := app.Party("/admin") + adminLoginApi := app.Party("/admin/login") + adminArticleApi := app.Party("/admin/article") + adminDinaryApi := app.Party("/admin/diary") + adminVersionApi := app.Party("/admin/version") + adminUserApi := app.Party("/admin/user") + adminFileApi := app.Party("/admin/file") adminApi.Use(middleware.Auth) adminArticleApi.Use(middleware.Auth) @@ -123,7 +123,8 @@ func main() { go cloud.DistributedService.ServiceUp() - app.Listen("localhost:8081") + host := bootstrap.Config.Cloud.Host + app.Listen(host) defer func() { log.Println("程序结束,关闭资源") diff --git a/BlogAdminService/third_party/database/RedisTemplate.go b/BlogAdminService/third_party/database/RedisTemplate.go index 220f058..c7dcb92 100644 --- a/BlogAdminService/third_party/database/RedisTemplate.go +++ b/BlogAdminService/third_party/database/RedisTemplate.go @@ -22,6 +22,6 @@ func init() { pong := sc.Val() if pong == "PONG" { log.Println("Redis连接成功") - RedisTemplate.FlushAll(ctx) + // RedisTemplate.FlushAll(ctx) } } diff --git a/BlogFileService/bootstrap/bootstrap.go b/BlogFileService/bootstrap/bootstrap.go index 81d967a..a18dd13 100644 --- a/BlogFileService/bootstrap/bootstrap.go +++ b/BlogFileService/bootstrap/bootstrap.go @@ -26,15 +26,17 @@ type sqlite struct { } type cloud struct { - ServiceName string `json:"serviceName"` - Address string `json:"address"` - Port string `json:"port"` + ServiceName string `json:"serviceName"` + Host string `json:"host"` + RegisterCenter string `json:"registerCenter"` + RegisterCenterDb int `json:"registerCenterDb"` + Heartbeat int `json:"heartbeat"` } type session struct { Addr string `json:"addr"` Db int `json:"db"` - Timeout int `json:"timeout"` + Expires int `json:"expires"` Password string `json:"password"` Database string `json:"database"` Prefix string `json:"prefix"` diff --git a/BlogFileService/cloud/DistributedService.go b/BlogFileService/cloud/DistributedService.go index 0228b4e..4e9caa1 100644 --- a/BlogFileService/cloud/DistributedService.go +++ b/BlogFileService/cloud/DistributedService.go @@ -1,27 +1,50 @@ package cloud import ( - "BlogAdmin/third_party/database" + "BlogFile/bootstrap" + "BlogFile/third_party/database" "context" "fmt" "log" "sync" + "time" + + "github.com/redis/go-redis/v9" ) var ( - serviceName string = "BlogAdminService" - host string = "192.168.0.50" - port string = "8081" - countMap sync.Map + // serviceName string = "BlogAdminService" + // host string = "192.168.0.50" + // port string = "8081" + countMap sync.Map ) type distributedService struct { } var DistributedService distributedService +var redisClient *redis.Client +var down bool func init() { - + registerCenter := bootstrap.Config.Cloud.RegisterCenter + db := bootstrap.Config.Cloud.RegisterCenterDb + redisClient = redis.NewClient(&redis.Options{ + Addr: registerCenter, + DB: db, // 默认DB 0 + }) + // RedisTemplate = redis.NewClient(&redis.Options{ + // Addr: "localhost:6379", + // Password: "", // 没有密码,默认值 + // DB: 0, // 默认DB 0 + // }) + ctx := context.Background() + sc := redisClient.Ping(ctx) + pong := sc.Val() + if pong == "PONG" { + log.Println("注册中心Redis连接成功") + // RedisTemplate.FlushAll(ctx) + } } func addReqCount(service string) int64 { @@ -48,11 +71,23 @@ func (*distributedService) Req(service string, url string) { } func (*distributedService) ServiceUp() { + go func() { + log.Println("心跳开始") + ctx := context.Background() + serviceName := bootstrap.Config.Cloud.ServiceName + host := bootstrap.Config.Cloud.Host + heartbeat := bootstrap.Config.Cloud.Heartbeat - ctx := context.Background() - key := fmt.Sprintf("distributed:%v", serviceName) - addr := fmt.Sprintf("%v:%v", host, port) - database.RedisTemplate.SAdd(ctx, key, addr) + for { + if down { + break + } + time.Sleep(time.Second * time.Duration(heartbeat)) + key := fmt.Sprintf("distributed:%v", serviceName) + // addr := fmt.Sprintf("%v:%v", host, port) + redisClient.SAdd(ctx, key, host) + } + }() // keys, _ := database.RedisTemplate.Scan(ctx, 0, keyPerfix, 0).Val() // i := len(keys) @@ -62,8 +97,11 @@ func (*distributedService) ServiceUp() { } func (*distributedService) ServiceDown() { + down = true ctx := context.Background() + serviceName := bootstrap.Config.Cloud.ServiceName + host := bootstrap.Config.Cloud.Host key := fmt.Sprintf("distributed:%v", serviceName) - addr := fmt.Sprintf("%v:%v", host, port) - database.RedisTemplate.SRem(ctx, key, addr) + // addr := fmt.Sprintf("%v:%v", host, port) + redisClient.SRem(ctx, key, host) } diff --git a/BlogFileService/conf/bootstrap.json b/BlogFileService/conf/bootstrap.json index 74d5479..f0f07ac 100644 --- a/BlogFileService/conf/bootstrap.json +++ b/BlogFileService/conf/bootstrap.json @@ -1,21 +1,22 @@ { "cloud": { "serviceName": "BlogFileService", + "host": "localhost:8088", "registerCenter": "localhost:6379", - "address": "localhost:8081", - "db": "0" + "registerCenterDb": 0, + "heartbeat": 10 }, "session": { "address": "localhost:6379", "database": "0", "prefix": "iris:session:", - "timeout": 10 + "expires": 10 }, "sqlite": { "path": "./db_blog_file.db" }, "redis": { "addr": "localhost:6379", - "db": 0 + "db": 1 } } \ No newline at end of file diff --git a/BlogFileService/main.go b/BlogFileService/main.go index 7fafedf..3d3ec75 100644 --- a/BlogFileService/main.go +++ b/BlogFileService/main.go @@ -51,7 +51,7 @@ func main() { addr := bootstrap.Config.Session.Addr redisDatabase := bootstrap.Config.Session.Database prefix := bootstrap.Config.Session.Prefix - timeout := bootstrap.Config.Session.Timeout + expires := bootstrap.Config.Session.Expires db := redisSession.New(redisSession.Config{ Network: "tcp", Addr: addr, @@ -66,7 +66,7 @@ func main() { // using the standard `html/template` package. sess := sessions.New(sessions.Config{ Cookie: "session_id_cookie", - Expires: time.Duration(timeout) * time.Hour, + Expires: time.Duration(expires) * time.Hour, AllowReclaim: true, }) sess.UseDatabase(db) @@ -85,7 +85,8 @@ func main() { go cloud.DistributedService.ServiceUp() - app.Listen("localhost:8088") + host := bootstrap.Config.Cloud.Host + app.Listen(host) defer func() { log.Println("程序结束,关闭资源") diff --git a/BlogFileService/third_party/database/RedisTemplate.go b/BlogFileService/third_party/database/RedisTemplate.go index 5bfb783..494797d 100644 --- a/BlogFileService/third_party/database/RedisTemplate.go +++ b/BlogFileService/third_party/database/RedisTemplate.go @@ -27,6 +27,6 @@ func init() { pong := sc.Val() if pong == "PONG" { log.Println("Redis连接成功") - RedisTemplate.FlushAll(ctx) + // RedisTemplate.FlushAll(ctx) } } diff --git a/BlogService/bootstrap/bootstrap.go b/BlogService/bootstrap/bootstrap.go index 81d967a..a18dd13 100644 --- a/BlogService/bootstrap/bootstrap.go +++ b/BlogService/bootstrap/bootstrap.go @@ -26,15 +26,17 @@ type sqlite struct { } type cloud struct { - ServiceName string `json:"serviceName"` - Address string `json:"address"` - Port string `json:"port"` + ServiceName string `json:"serviceName"` + Host string `json:"host"` + RegisterCenter string `json:"registerCenter"` + RegisterCenterDb int `json:"registerCenterDb"` + Heartbeat int `json:"heartbeat"` } type session struct { Addr string `json:"addr"` Db int `json:"db"` - Timeout int `json:"timeout"` + Expires int `json:"expires"` Password string `json:"password"` Database string `json:"database"` Prefix string `json:"prefix"` diff --git a/BlogService/cloud/DistributedService.go b/BlogService/cloud/DistributedService.go index bc4a700..8c944ea 100644 --- a/BlogService/cloud/DistributedService.go +++ b/BlogService/cloud/DistributedService.go @@ -1,24 +1,51 @@ package cloud import ( + "Blog/bootstrap" "Blog/third_party/database" "context" "fmt" "log" "sync" + "time" + + "github.com/redis/go-redis/v9" ) var ( - serviceName string = "BlogService" - host string = "192.168.0.50" - port string = "8080" - countMap sync.Map + // serviceName string = "BlogAdminService" + // host string = "192.168.0.50" + // port string = "8081" + countMap sync.Map ) type distributedService struct { } var DistributedService distributedService +var redisClient *redis.Client +var down bool + +func init() { + registerCenter := bootstrap.Config.Cloud.RegisterCenter + db := bootstrap.Config.Cloud.RegisterCenterDb + redisClient = redis.NewClient(&redis.Options{ + Addr: registerCenter, + DB: db, // 默认DB 0 + }) + // RedisTemplate = redis.NewClient(&redis.Options{ + // Addr: "localhost:6379", + // Password: "", // 没有密码,默认值 + // DB: 0, // 默认DB 0 + // }) + ctx := context.Background() + sc := redisClient.Ping(ctx) + pong := sc.Val() + if pong == "PONG" { + log.Println("注册中心Redis连接成功") + // RedisTemplate.FlushAll(ctx) + } +} func addReqCount(service string) int64 { val, _ := countMap.Load(service) @@ -44,11 +71,23 @@ func (*distributedService) Req(service string, url string) { } func (*distributedService) ServiceUp() { + go func() { + log.Println("心跳开始") + ctx := context.Background() + serviceName := bootstrap.Config.Cloud.ServiceName + host := bootstrap.Config.Cloud.Host + heartbeat := bootstrap.Config.Cloud.Heartbeat - ctx := context.Background() - key := fmt.Sprintf("distributed:%v", serviceName) - addr := fmt.Sprintf("%v:%v", host, port) - database.RedisTemplate.SAdd(ctx, key, addr) + for { + if down { + break + } + time.Sleep(time.Second * time.Duration(heartbeat)) + key := fmt.Sprintf("distributed:%v", serviceName) + // addr := fmt.Sprintf("%v:%v", host, port) + redisClient.SAdd(ctx, key, host) + } + }() // keys, _ := database.RedisTemplate.Scan(ctx, 0, keyPerfix, 0).Val() // i := len(keys) @@ -58,8 +97,11 @@ func (*distributedService) ServiceUp() { } func (*distributedService) ServiceDown() { + down = true ctx := context.Background() + serviceName := bootstrap.Config.Cloud.ServiceName + host := bootstrap.Config.Cloud.Host key := fmt.Sprintf("distributed:%v", serviceName) - addr := fmt.Sprintf("%v:%v", host, port) - database.RedisTemplate.SRem(ctx, key, addr) + // addr := fmt.Sprintf("%v:%v", host, port) + redisClient.SRem(ctx, key, host) } diff --git a/BlogService/conf/bootstrap.json b/BlogService/conf/bootstrap.json index 653a772..1b6faa3 100644 --- a/BlogService/conf/bootstrap.json +++ b/BlogService/conf/bootstrap.json @@ -1,21 +1,22 @@ { "cloud": { "serviceName": "BlogService", + "host": "localhost:8080", "registerCenter": "localhost:6379", - "address": "localhost:8081", - "db": "0" + "registerCenterDb": 0, + "heartbeat": 10 }, "session": { "address": "localhost:6379", "database": "0", "prefix": "iris:session:", - "timeout": 120 + "expires": 10 }, "sqlite": { "path": "./db_blog.db" }, "redis": { "addr": "localhost:6379", - "db": 0 + "db": 1 } } \ No newline at end of file diff --git a/BlogService/main.go b/BlogService/main.go index 6c5a865..20e77f8 100644 --- a/BlogService/main.go +++ b/BlogService/main.go @@ -56,7 +56,7 @@ func main() { addr := bootstrap.Config.Session.Addr redisDatabase := bootstrap.Config.Session.Database prefix := bootstrap.Config.Session.Prefix - timeout := bootstrap.Config.Session.Timeout + expires := bootstrap.Config.Session.Expires db := redis.New(redis.Config{ Network: "tcp", Addr: addr, @@ -88,7 +88,7 @@ func main() { // using the standard `html/template` package. sess := sessions.New(sessions.Config{ Cookie: "session_id_cookie", - Expires: time.Duration(timeout) * time.Hour, + Expires: time.Duration(expires) * time.Hour, AllowReclaim: true, }) sess.UseDatabase(db) @@ -109,7 +109,8 @@ func main() { go service.ContentService.InitContentData() go cloud.DistributedService.ServiceUp() - app.Listen("localhost:8080") + host := bootstrap.Config.Cloud.Host + app.Listen(host) defer func() { log.Println("程序结束,关闭资源")