全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-24 10 分钟 ✍️ juanwangdev

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访问权限
modeEPHEMERAL_SEQUENTIAL

临时节点特性

特性说明
会话绑定创建会话存活期间存在
自动删除会话结束自动删除
无需清理服务宕机自动注销

服务注销场景

场景处理
服务正常停止删除临时节点
服务宕机会话超时自动删除
网络断开会话失效自动删除

健康检查

text
临时节点 = 存活状态
节点存在 → 服务存活
节点删除 → 服务不可用
无需额外健康检查

注册注意事项

注意点说明
会话超时设置合理的超时时间
重连处理重连后重新注册
数据更新地址变化需更新节点数据

注意:服务重连后需重新创建临时节点注册。

要点总结

  • 服务目录按服务名称组织
  • 临时节点存储服务实例地址
  • 临时节点绑定会话,自动注销
  • 服务宕机自动从注册表移除
  • 消费者获取子节点列表发现服务
  • EPHEMERAL_SEQUENTIAL模式注册
  • 无需额外健康检查机制

📝 发现内容有误?点击此处直接编辑

← 上一篇 ZooKeeper配置版本与环境隔离
下一篇 → ZooKeeper服务缓存与唯一ID
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库