一. 数据模型
InstanceMeta用于描述服务实例的元信息:
- schema:比如http
- host,:比如127.0.0.1
- port:比如8082
- context:比如midnight-rpc
- status:服务上下线,true/false
- Parameters: 服务携带的参数,比如环境、tag等
二. 注册中心服务接口定义
- 注册:将服务和实例注册;
- 取消注册:移除服务实例;
- 获取所有实例;
- 刷新服务版本:服务实例每变动一次,就更新时间戳;
- 版本:获取服务指定版本;
- 多个版本:获取多个服务对应的版本号;
三. 注册中心服务实现
实现接口定义中的方法。使用controller对外暴露接口。
使用的字段包括
- TIMESTAMPS:每个服务实例对应的时间戳;
- REGISTRY:保存服务和实例,使用Map;
- VERSIONS:每个服务对应的最新版本号;
- VERSION:全局递增变量;
- register()服务注册
根据服务从注册中心获取实例,如果实例已经存在,就把状态设置为“上线”,然后返回该实例。如果不存在就添加到注册中心,状态设置为true(上线),刷服务实例时间戳,设置服务版本号。
- renew() 刷新服务实例
更新服务实例的时间戳
- unregister() 取消注册
根据服务获取实例,不存在就直接返回。存在就从注册中心集合中移除该实例,实例状态设置为false(下线),刷新时间戳,更新最新版本号。
- getAllInstances() 获取所有实例
直接从注册中心获服务对应的所有实例。
- version() 服务版本号
根据服务获取对应的版本号。
- versions() 多个服务版本号
根据传入的服务集合获取对应的版本号。
四. 测试
- register注册服务
- getAllInstances获取所有实例
- unregiste取消服务实例注册
- versions获取多个服务版本号