关于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)待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值