ZooKeeper服务注册发现机制
服务注册发现是微服务架构基础组件。
服务注册发现模型
模型设计:
Java
/services <- 服务根目录
/services/order-service <- 订单服务目录
/services/order-service/instance-0001 <- 服务实例(临时节点)
/services/user-service <- 用户服务目录
节点数据存储:
text
服务地址存储在节点数据中:
192.168.1.100:8080
或完整元数据:
{
"host": "192.168.1.100",
"port": 8080,
"weight": 1,
"status": "up"
}
工作流程:
| 角色 | 操作 |
|---|---|
| 提供者 | 创建临时节点注册地址 |
| 消费者 | 获取子节点列表发现服务 |
| 消费者 | 监听子节点变化实时更新 |
服务发现流程:
text
1. 服务启动,创建临时节点注册
2. 消费者获取/services/order子节点
3. 解析子节点数据获取地址列表
4. 从列表中选择一个地址调用
5. 监听子节点变化,实时更新
提示:临时节点自动清理是服务注册的核心优势。
临时节点服务注册
注册代码:
text
// 服务启动时注册
String path = zk.create(
"/services/order-service/instance-",
"192.168.1.100:8080".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.EPHEMERAL_SEQUENTIAL
);
// 结果:/services/order-service/instance-0000000001
注册参数:
| 参数 | 说明 |
|---|---|
| path | 节点路径前缀 |
| data | 服务地址数据 |
| acl | 访问权限 |
| mode | EPHEMERAL_SEQUENTIAL |
临时节点特性:
| 特性 | 说明 |
|---|---|
| 会话绑定 | 创建会话存活期间存在 |
| 自动删除 | 会话结束自动删除 |
| 无需清理 | 服务宕机自动注销 |
服务注销场景:
| 场景 | 处理 |
|---|---|
| 服务正常停止 | 删除临时节点 |
| 服务宕机 | 会话超时自动删除 |
| 网络断开 | 会话失效自动删除 |
健康检查:
text
临时节点 = 存活状态
节点存在 → 服务存活
节点删除 → 服务不可用
无需额外健康检查
注册注意事项:
| 注意点 | 说明 |
|---|---|
| 会话超时 | 设置合理的超时时间 |
| 重连处理 | 重连后重新注册 |
| 数据更新 | 地址变化需更新节点数据 |
注意:服务重连后需重新创建临时节点注册。
要点总结
- 服务目录按服务名称组织
- 临时节点存储服务实例地址
- 临时节点绑定会话,自动注销
- 服务宕机自动从注册表移除
- 消费者获取子节点列表发现服务
- EPHEMERAL_SEQUENTIAL模式注册
- 无需额外健康检查机制
📝 发现内容有误?点击此处直接编辑