你好,由于需要实现服务无状态无顺序启动,需要在第一次请求时实时创建XClientPool和EtcdDiscovery,这时会出现竞争问题:
错误如下:
`WARNING: DATA RACE
Write at 0x00c000272950 by goroutine 71:
github.com/smallnest/rpcx/client.(*EtcdDiscovery).watch()
C:/Users/Administrator/go/pkg/mod/github.com/smallnest/rpcx@v0.0.0-20200904040754-162b6648c998/client/etcd_discovery.go:216 +0xb8c
Previous read at 0x00c000272950 by goroutine 65:
github.com/smallnest/rpcx/client.(*EtcdDiscovery).GetServices()
C:/Users/Administrator/go/pkg/mod/github.com/smallnest/rpcx@v0.0.0-20200904040754-162b6648c998/client/etcd_discovery.go:119 +0x45
github.com/smallnest/rpcx/client.NewXClient()
C:/Users/Administrator/go/pkg/mod/github.com/smallnest/rpcx@v0.0.0-20200904040754-162b6648c998/client/xclient.go:114 +0x217
github.com/smallnest/rpcx/client.NewXClientPool()
C:/Users/Administrator/go/pkg/mod/github.com/smallnest/rpcx@v0.0.0-20200904040754-162b6648c998/client/xclient_pool.go:38 +0x337
github.com/doublemo/baa/internal/rpcx.NewXClientPool()
G:/works/2020/balala/github.com/doublemo/baa/internal/rpcx/rpc.go:21 +0x117`
引发代码如下:
`
go func(){
d:= client.NewEtcdDiscovery(etcd.BasePath, "serviceName", etcd.Addr, nil)
option:= client.DefaultOption
p := client.NewXClientPool(10, "serviceName", client.Failover, client.WeightedRoundRobin, d, option)
}()
`
这里还有个问题,动态创建时,如果指定服务不存于etcd 会引发panic
请问这个问有没有解决方案