讲一下服务注册发现。什么是注册发现?在server端启动成绩时候,把server的名称注册到数据库里面去,再看这边就直接放入水库,根据数据库对应的server名称来获得对应的server的ip账号,然后跟他们建立联系。
这种情况下,一个server可有多个工具站,可有多个ip或者官号。每次cant从服务中心那边根据服务名获取到的是一个三十秒的ip,也就说服务中心内部完成了附带均衡的功能。而且服务端每多台服务系或者每少一台服务系,服务中心都能够及时的感知到。
关于服务的注册中心有多种实现方案了,像etcd、console to keeper等等,catex里面都进行了封装。就只演示一下在catex里面如何使用etc来实现辅助随发现。如果在项目里面需要单独的使用etc,就需要对etc的方方面面进行详细的学习,包括怎么安装监听器、怎么续约、怎么读写数据等等。
这一块在公园编程大学里面讲的很详细,来看一下在context里面如何进行服务的注册。
·先来到server端这边,在创建赛跑之前先连接上本机的etcd,需要先把etcd服务端启动好。但生长环境中肯定是在单独的服务器上去部署etcd,只有一台机器在维度之上先把它给启动起来。就好比这是一个水库,把它当成是一个水库来看就可以了。
·启动好之后这边需要去连上etcd、e t c d.6、e t c d registry注册。e t c d生殖环境中可能是一个分布式的有多台,所以这边传的是一个切片。因为只是不在本机了,而且也没有改默认的公众端口号,默认端口号是二、三、七、九,这是etcd的公众端口号。
·有时候et字画想连接还需要配置对应的认证信息,比方用户没有密码,所以那个时候就需要使用它有一个with was,这样一个方法需要指定账号密码,本地安全级别很低。如果连接ed t d失败还需要直接退出fight。
·如果成功在创建serve的时候需要传很多option,是一个不定场参数,这边加一个option,severing with registry带一个注册操作传过来。这样当这台server清的时候会把自己的工作的ip和端口号以对应的服务的名称一同的去写到凯泰上去。
·先来把服务端启动一下,重新启动一下,这边是报错了,需要,刚刚引入了一个新的包,需要go get一下,或者直接执行go mode tidy也可以,再来下载这个e t c d。
·下完之后红线已经消失了,再来运行一下,这边又报了一个跟thrift相关的错误,说这个no enough arguments。遇见这个错误一般是由于ktax内部跟thrift版本间容易的问题,这个时候需要改一下购物的文件,需要在go mod文件里面追加一行东西。
·打开go mod之前是强行指定了关于proto buff的版本,类似的还需要指定一下对应的serve的版本为零点一三点零。
·每当更改go mod文件需要去重新执行go mod 泰迪,再把辅再起一下,这边又意义败退出了,看看对应的错日志,遇到问题一定要去看日志,一句语言报错,他说这个缺少对应的服务名,就当去异地这样布置的时候没有传对应的服务名。
·看到这个服务名还需要在代码里面显示的去指定,在这个凹审里面需要再加一个凹审位子service basic info,在 info里面来指定服务的名称,需要铲一个rpc info的指针,rpc info终端and point basic info,把service名称传进service name,把d q q给max,复名正传讲后面需要加一个逗号。
·再来启动一下,right,看看对应的服务端,这边说已经在五六七八段高上面把rtc服务给集团起来了,并且跟edc注册中心成功的创建了心跳连接,对应的客户端代码这边就不需要去直接指定ip和端午号了,只需要去访问ed c d服务中心就可以了。
·所以客户互动代码这边也需要跟ed c d创建一个连接,等于ed c d点newed resorber,把ed c d集群的各个ip和端口传讲,ed c d的工作端口是二三七九,这是默认的也得改。
·如果服务中心连接不上可以直接battle arrow,在创建cancer的时候服务名称必须要严格来写,服务名称就不能随便写了,就必须写成跟刚才那个负段名称保持一致d qq点nice,就不需要去指定ip和账号了,只需要把resolver传递过来就可以了。
·client option,client关于with resolver,把客户的代码单起一下看看,客户端起一下,跑完了看一下客户端对应的client 点 log,他们顺利的取到了三,这个结果,可以把et、td当成是一个题库来看待。
刚才注册上去之后有没有把对应的数据写进db里面去?有一个工具可以去对ed、cd进行读写,可以先读一下get一下,这个是根据k去找对应的原理,而且k只要满足这样一个前缀就可以了。发现这个是对应的k,关于注册功能,把d、k、q、max作为服务名称可以体现在k里面,对应的value就是这样一个ip和一个账号,目前就它it has suffer。
如果把server端改成多台,怎么改成多台?刚才看一下,刚才的服务端不是目前还处于启动的状态吗?再起一个server,但是端口号就必须要改一下。来到server的命令点勾里面,把端口号改成五六七八改成五六七九,五六七九对应的一支文件改成serverr点log,然后新开一个终端,再起一个server,gorun server,再起一个server,看一下对应的也是这里面多了一个server二点log,目前也是成功的启动好了。
启动好之后再来看一眼et、cd里面的数据,现在跟刚才一模一样的年龄,这个时候发现就有两台ip账号对应到同一个sex name,这个时候如果再使用code端去发起掉意思,这个就会从两台server里面随机的选择一台,看到kind还是能够正常的取到结果。
这个时候如果强行的把第一台serverctrl c给停掉,停掉之后再来观察一下ed、cd,再执行一下get命令,目前就只剩下五六七九这一个端口号还在工作了,这个时候对client而言是丝毫不受影响的,因为content并没有把负端的ip端口号写死,content只是写了一个注册中心的ip的端口号,所以content依然是一个正常的渠道结果。
看第四行,这头还是能够取到三,这个结果就是服务注册的好处,它是具有弹性的,server端增加删除服务器对端端没有任何影响。
,