注册中心解释

注册中心没那么玄乎,其实可以简单理解为:
提供一个存储介质,供服务提供者和服务消费者共同连接,而存储的主要信息就是这里的 URL。

一个完整的注册中心需要实现以下功能:

  1. 接收服务端的注册与客户端的引用,即将引用与消费建立关联,并支持多对多。
  2. 当服务端发生变化时,能及时更新状态,通知客户端。
  3. 当注册中心重启时,能自动恢复注册数据,以及订阅请求。

注册中心的角色分工

在这里插入图片描述

  1. Server端
    a. 服务启动后向注册中心注册一个自己的实例。
    b. 定期向注册中心发送心跳。
    c. 服务关闭时向注册中心发起注销。
  2. Client端
    a. 服务启动后向注册中心订阅所需的服务(Server),并缓存到实例列表。
    b. 向服务(Server)发起调用时,从内存中对应的实例列表选择一个,进行远程调用。
    c. 服务关闭时向注册中心取消订阅。
  3. 注册中心
    a. Server端超过一定时间未提供心跳时,从服务的实例列表移除。
    b. 服务的实例列表发生变化(新增或移除)时,通知订阅该服务的Client端去刷新本地缓存。(Eureka不提供此功能,Client定期轮询)

如何实现注册中心

服务注册接口

public interface RegistryService {
    //1. 向注册中心注册服务
    void register(URL url);
    //2. 从注册中心摘除服务
    void unregister(URL url);
    //3. 将服务设置为可用,供客户端调用
    void available(URL url);
    //4. 禁用服务,客户端无法发现该服务
    void unavailable(URL url);
    //5. 获取已注册服务的集合
    Collection<URL> getRegisteredServiceUrls();
}

服务发现接口

public interface DiscoveryService {
    //1. 订阅服务
    void subscribe(URL url, NotifyListener listener);
    //2. 取消订阅
    void unsubscribe(URL url, NotifyListener listener);
    //3. 发现服务列表
    List<URL> discover(URL url);
}

URL类定义

public class URL {
    private String protocol;//协议名称
    private String host;
    private int port;
    // interfaceName,也代表着路径
    private String path;
    private Map<String, String> parameters;
    private volatile transient Map<String, Number> numbers;
}

注册中心实际存储了什么?

以dubbo+zookeeper举例
整个zookeeper的路径概览:

  • /dubbo: root 目录, 持久化目录 (可通过 group=xxx 自定义root目录)
  • /dubbo/xxx.xx.XxxService: 每个服务一个路径,持久化目录
  • /dubbo/xxx.xx.XxxService/configurators: 配置存放路径,默认为空
  • /dubbo/xxx.xx.XxxService/providers: 服务提供者目录,所有提供者以其子路径形式存储,持久化目录。
  • /dubbo/xxx.xx.XxxService/consumers: 服务消费者目录, 持久化路径。
  • /dubbo/xxx.xx.XxxService/routers: 路由配置信息,默认为空

示例Server服务端

dubbo://192.168.56.1:20880/org.apache.dubbo.demo.DemoService?anyhost=true&application=dubbo-demo-api-provider&default=true&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=org.apache.dubbo.demo.DemoService&methods=sayHello,sayHelloAsync&pid=112756&release=&side=provider&timestamp=1588548412331

将上述进行URLEncode,即为实际的节点

示例Client客户端

consumer://192.168.1.4/org.apache.dubbo.rpc.service.GenericService?application=dubbo-demo-api-consumer&category=consumers&check=false&dubbo=2.0.2&generic=true&interface=org.apache.dubbo.demo.DemoService&pid=139620&side=consumer&sticky=false&timestamp=1588596195728

将上述进行URLEncode,即为实际的节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yunzhang1885

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值