mirror of
https://github.com/fhmq/hmq.git
synced 2026-04-24 10:38:34 +00:00
91 lines
1.3 KiB
Go
91 lines
1.3 KiB
Go
package broker
|
|
|
|
import (
|
|
"net"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func (b *Broker) processClusterInfo() {
|
|
for {
|
|
msg, ok := <-b.clusterPool
|
|
if !ok {
|
|
log.Error("read message from cluster channel error")
|
|
return
|
|
}
|
|
ProcessMessage(msg)
|
|
}
|
|
|
|
}
|
|
|
|
func (b *Broker) ConnectToDiscovery() {
|
|
var conn net.Conn
|
|
var err error
|
|
var tempDelay time.Duration = 0
|
|
for {
|
|
conn, err = net.Dial("tcp", b.config.Router)
|
|
if err != nil {
|
|
log.Error("Error trying to connect to route: ", zap.Error(err))
|
|
log.Debug("Connect to route timeout ,retry...")
|
|
|
|
if 0 == tempDelay {
|
|
tempDelay = 1 * time.Second
|
|
} else {
|
|
tempDelay *= 2
|
|
}
|
|
|
|
if max := 20 * time.Second; tempDelay > max {
|
|
tempDelay = max
|
|
}
|
|
time.Sleep(tempDelay)
|
|
continue
|
|
}
|
|
break
|
|
}
|
|
log.Debug("connect to router success :", zap.String("Router", b.config.Router))
|
|
|
|
cid := b.id
|
|
info := info{
|
|
clientID: cid,
|
|
keepalive: 60,
|
|
}
|
|
|
|
c := &client{
|
|
typ: ROUTER,
|
|
broker: b,
|
|
conn: conn,
|
|
info: info,
|
|
}
|
|
|
|
c.init()
|
|
|
|
c.SendConnect()
|
|
c.SendInfo()
|
|
|
|
go c.readLoop()
|
|
go c.StartPing()
|
|
}
|
|
|
|
func (b *Broker) checkNodeExist(id, url string) bool {
|
|
if id == b.id {
|
|
return false
|
|
}
|
|
|
|
for k, v := range b.nodes {
|
|
if k == id {
|
|
return true
|
|
}
|
|
|
|
//skip
|
|
l, ok := v.(string)
|
|
if ok {
|
|
if url == l {
|
|
return true
|
|
}
|
|
}
|
|
|
|
}
|
|
return false
|
|
}
|