func InitRouter() (err error) { var ( network, addr string ) routerRing = ketama.NewRing(ketama.Base) for serverId, addrs := range Conf.RouterRPCAddrs { // WARN r must every recycle changed for reconnect var ( r *rpc.Client routerQuit = make(chan struct{}, 1) ) if network, addr, err = inet.ParseNetwork(addrs); err != nil { log.Error("inet.ParseNetwork() error(%v)", err) return } r, err = rpc.Dial(network, addr) if err != nil { log.Error("rpc.Dial(\"%s\", \"%s\") error(%s)", network, addr, err) } go rpc.Reconnect(&r, routerQuit, network, addr) log.Debug("router rpc addr:%s connect", addr) routerServiceMap[serverId] = &r routerRing.AddNode(serverId, 1) } routerRing.Bake() return }
func InitRouterRpc(addrs []string, retry time.Duration) (err error) { var r *rpc.Client routerRing = ketama.NewRing(ketama.Base) for _, addr := range addrs { r, err = rpc.Dial("tcp", addr) if err != nil { log.Error("rpc.Dial(\"%s\") error(%s)", addr, err) return } go rpcPing(addr, r, retry) log.Debug("router rpc addr:%s connect", addr) routerServiceMap[addr] = r routerRing.AddNode(addr, 1) } routerRing.Bake() return }