关于chatengine中的若干bug解决

1)我是在windows10下运行,golang1.13.8

问题描述:

frontend在运行时,总是提示无法查找到key,经检查代码发现使用zrpcclient在创建etcd客户端时候莫名的错误,

估计与使用的库有关。

解决方案:多创建几次,保证成功:

// 所有的调用都使用"brpc"
func NewZRpcClient(protoName string, conf *ZRpcClientConfig, cb ZPpcClientCallBack) *ZRpcClient {
	clients := map[string][]string{}

	c := &ZRpcClient{
		callback: cb,
	}

	// 这里传进去一个空值,应该后面在watcher中addclient中添加到cgm中
	c.clients = net2.NewTcpClientGroupManager(protoName, clients, c)

	// Check name
	for i := 0; i < len(conf.Clients); i++ {
		// service discovery
		etcdConfg := clientv3.Config{
			Endpoints: conf.Clients[i].EtcdAddrs,
		}
		watcher := &Watcher{
			name: conf.Clients[i].Name,
		}
		// 这里的意思是本地的变量watcher里的 *watcher2.ClientWatcher类型watcher,
		watcher.watcher, _ = watcher2.NewClientWatcher("/nebulaim", conf.Clients[i].Name, etcdConfg, c.clients)
		// 之前这里的值在后面用的时候发现是空值
		k := 0
		for ; k <= 10 && watcher.watcher == nil;  {
			fmt.Printf("出现了问题,连接etcd错误, 重试第 %d 次 \n", k+2)
			time.Sleep(1 * time.Second)
			watcher.watcher, _ = watcher2.NewClientWatcher("/nebulaim", conf.Clients[i].Name, etcdConfg, c.clients)
			k = k + 1
		}
		if k >= 10 {
			fmt.Println("NewClientWatcher中etcd错误,试了10次还不行,重启一次试试")
		}


		if conf.Clients[i].Balancer == "ketama" {
			watcher.ketama = load_balancer.NewKetama(10, nil)
		} else {
			watcher.ketama = nil
		}
		c.watchers = append(c.watchers, watcher)
	}

	return c
}

后面发现,多试一次基本就好了,有人提示在前面加Sleep也可以。

 

2)待续

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章