服务类的基本文件
程序和etcd服务器建立的原生连接,后面的类和功能本质上都是对这个连接的封装
IP:string GrcpListten,本程序的Grcp服务器监听地址
核心服务
Name:string
服务的名称,例如unique、agent1、agent2、game1、game2…
Info:ServiceInfo
包含一个自身Grcp监听地址的对象 例如 127.0.0.1:8101
stop:chan error
停止通道标记,靠这个标记来停止服务
leaseid:clientv3.LeaseID
和etcd连接的ID
client:*clientv3.Client
etcd的原生连接对象
servicePath:string
自身服务在etcd上对应的服务地址,比如/backents/unique、/backents/agent/agent1
serviceType:string
枚举类型,标定本服务是unique、agent、game或是其他
version:string
版本号,用于自动更新
SetService(name:string,info:ServiceInfo,servicePath:string)
设置name、info、servicePath和创建stop chan
Start()
[go]调用keepAlive发放,同时接受stop标记,和client关闭以及其他可能导致连接关闭的服务
Stop()
通过发送stop标记来关闭客户端
keepAlive()
etcd客户端保活机制。把grcp的key-value推送到etcd,并且开启保活
WatchNodes(path:string,callback:fun())
[go]监听ectd上的字符串,并制定对应的对调
GetClient()*clientv3.Client
返回自身的原生连接对象
PutKey(key:string,value:string,ttl:int64)
把key和对应的value写入etcd服务器,key是服务器ID,value是Grcp地址
GetValue(key:string,ttl:int64)
根据key获取对应的value值,也就是根据服务器id来获取对应grcp地址
CheckMe(serverInfo,name,serverType:string)
检查制定这个name和serverType是否在配置文件中,如果不在配置文件中是不能启动的
WatchMeChange(ch chan int)
监控配置文件,如果配置文件改变了,则对比版本号,如果版本号发生变化要进行自动重启
GetServiceInfo(ev:*clientv3.Client)*ServiceInfo
根据etcd连接事件来获取,是哪个Grcp地址
GetServiceInfoByValue(value:[]byte)*ServiceInfo
根据服务ID来获取对应的grcp地址
BeforeService(endpoints []string)(*Service,error)
根据etcd的地址生成一个Service,Service包含一个原生的clientv3.Client对象