forked from nsqio/nsq
/
nsqlookupd.go
67 lines (57 loc) · 1.48 KB
/
nsqlookupd.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
package nsqlookupd
import (
"github.com/bitly/nsq/util"
"log"
"net"
)
type NSQLookupd struct {
options *nsqlookupdOptions
tcpAddr *net.TCPAddr
httpAddr *net.TCPAddr
tcpListener net.Listener
httpListener net.Listener
waitGroup util.WaitGroupWrapper
DB *RegistrationDB
}
func NewNSQLookupd(options *nsqlookupdOptions) *NSQLookupd {
tcpAddr, err := net.ResolveTCPAddr("tcp", options.TCPAddress)
if err != nil {
log.Fatal(err)
}
httpAddr, err := net.ResolveTCPAddr("tcp", options.HTTPAddress)
if err != nil {
log.Fatal(err)
}
return &NSQLookupd{
options: options,
tcpAddr: tcpAddr,
httpAddr: httpAddr,
DB: NewRegistrationDB(),
}
}
func (l *NSQLookupd) Main() {
context := &Context{l}
tcpListener, err := net.Listen("tcp", l.tcpAddr.String())
if err != nil {
log.Fatalf("FATAL: listen (%s) failed - %s", l.tcpAddr, err.Error())
}
l.tcpListener = tcpListener
tcpServer := &tcpServer{context: context}
l.waitGroup.Wrap(func() { util.TCPServer(tcpListener, tcpServer) })
httpListener, err := net.Listen("tcp", l.httpAddr.String())
if err != nil {
log.Fatalf("FATAL: listen (%s) failed - %s", l.httpAddr, err.Error())
}
l.httpListener = httpListener
httpServer := &httpServer{context: context}
l.waitGroup.Wrap(func() { util.HTTPServer(httpListener, httpServer) })
}
func (l *NSQLookupd) Exit() {
if l.tcpListener != nil {
l.tcpListener.Close()
}
if l.httpListener != nil {
l.httpListener.Close()
}
l.waitGroup.Wait()
}