ETCD 服务发现
在微服务中各个服务都是无状态的,不会在配置中写死上下游的访问地址,所以需要有一个地方去维护各个节点的信息。
服务起来的时候会去注册中心拉取其他服务的节点信息,并且把自己的信息推送到注册中心。
当有运行的服务下线或者出现问题的时候,把自己从配置中心摘除,或者配置中心来检测服务状态(心跳、健康检查的协议)来摘除服务。
1 | package main |
服务注册
在etcd中服务的注册使用租约(lease)来实现,设置租约的时候按需求设置租约的时间(ttl),类似redis中的EXPIRE key,再把服务自身的节点等信息写到对应的key中。然后定时去调用KeepAliveOnce来保持租约,如果在期间KeepAliveOnce的消息丢失或者延迟大于这个租约的ttl则etcd中将会把这个节点的信息删除,恢复正常时重新发起租约流程。
1 |
|
节点管理
1 | package main |
测试效果
1 | package main |
运行结果
1 | 2020-10-18 22:36:39.102233 I | [Register] keepalive... leaseId:7587849142468224212 |