/
main.go
68 lines (55 loc) · 1.5 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"context"
"flag"
"fmt"
_ "net/http/pprof"
"os"
"os/signal"
"syscall"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
conf "github.com/amazingchow/photon-dance-consistent-hashing/internal/config"
"github.com/amazingchow/photon-dance-consistent-hashing/internal/util"
)
var (
cfgPathFlag = flag.String("conf", "conf/node.json", "node config file")
nodeIDFlag = flag.String("id", "", "node id")
verboseFlag = flag.Bool("verbose", false, "set verbose output")
)
func main() {
flag.Parse()
// 设置全局logger
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339})
zerolog.SetGlobalLevel(zerolog.InfoLevel)
if *verboseFlag {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
}
// 加载节点配置
var cfg conf.Node
util.LoadConfigFileOrPanic(*cfgPathFlag, &cfg)
// 设置节点ID, 节点ID用于节点间通信
nID := *nodeIDFlag
if nID == "" {
hn, _ := os.Hostname()
nID = fmt.Sprintf("%s:%d", hn, util.GetPort(cfg.GRPCEndpoint))
log.Warn().Msgf("since NodeID not provided, set default value, NodeID=%s", nID)
}
ctx, cancel := context.WithCancel(context.Background())
defer func() {
cancel()
}()
srv := newConsistentHashingServiceServer(ctx, nID, &cfg)
defer func() {
srv.close()
}()
// 开启grpc服务
go serveGPRC(ctx, srv, &cfg)
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
for range sigCh {
break
}
log.Info().Msg("stop consistent hashing service")
}