详解-手写RPC框架(5.5)-注册中心实现的三个机制

引言

在手写RPC框架中,注册中心是一个关键的组件,用于管理和维护服务提供者列表。为了实现有效的服务注册、发现和路由,注册中心需要借助一些机制来实现服务信息的共享、健康状态的监测以及变化的监听。本篇博客将介绍手写RPC框架中注册中心实现的三个重要机制:共享机制、心跳机制和监听机制。

共享机制:

共享机制是指注册中心提供一个数据结构,用于存储服务提供者的信息,并且可以被多个节点访问和更新。常见的共享机制包括内存、数据库和分布式存储等。

以下是共享机制的几个关键步骤:

  1. 注册中心创建一个共享数据结构,如哈希表或数据库表,用于存储服务提供者的信息。
  2. 服务提供者在启动时将自身的信息注册到共享数据结构中。
  3. 消费者通过访问共享数据结构获取可用的服务提供者列表。

共享机制的作用:实现服务信息的存储和共享,确保各个节点之间获取到一致的服务提供者列表。

共享机制的实现

在MapRemoteRegister中使用文件进行共享,服务提供方将调用方需要使用的接口名和url地址通过map键值对存在文件中,以此进行文件的共享

public class MapRemoteRegister implements Serializable{
    //之所以用List存URL是因为Provider可能提供多个服务
    private static Map<String, List<URL>> map = new HashMap<>();

    //注册时将url加入到List中去
    public static void regist(String interfaceName, URL url) {
        List<URL> list = map.get(interfaceName);
        if (list == null) {
            list = new ArrayList<>();
        }
        list.add(url);
        map.put(interfaceName, list);
        //存到map里之后再写到文件里面去,实现map的共享
        saveFile();
    }
    public static List<URL> get(String interfaceName) {
        //拿之前先读文件从里面拿出来
        map=getFile();

        return map.get(interfaceName);
    }

    //两台机器,通过Map共享文件(共享机制)
    private static void saveFile() {
        try {
            FileOutputStream fileOutputStream = new FileOutputStream("/temp.txt");
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            //将map写入文件
            objectOutputStream.writeObject(map);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static Map<String, List<URL>> getFile() {
        try {
            FileInputStream fileInputStream = new FileInputStream("/temp.txt");
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            return (Map<String, List<URL>>) objectInputStream.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

心跳机制

心跳机制是指服务提供者定期向注册中心发送心跳,并表明自己的健康状态。注册中心根据心跳信息来判断服务提供者的可用性和健康状况。

以下是心跳机制的几个关键步骤:

  1. 服务提供者启动时,定期向注册中心发送心跳请求。
  2. 注册中心接收到心跳请求后,更新服务提供者的健康状态信息。
  3. 消费者从注册中心获取服务提供者列表时,只选择健康状态良好的服务提供者。

心跳机制的作用:实现服务提供者的健康监测,及时发现不可用的服务提供者并从可用的列表中剔除。

监听机制

监听机制是指消费者订阅注册中心的变化通知,以获取最新的服务提供者列表。当注册中心服务提供者列表发生变化时,将通知已订阅的消费者进行更新。

以下是监听机制的几个关键步骤:

  1. 消费者启动时,向注册中心订阅服务提供者列表的变化通知。
  2. 注册中心在服务提供者列表发生变化时,广播变化消息给已订阅的消费者。
  3. 消费者收到变化通知后,更新本地的服务提供者列表。

监听机制的作用:实时获取服务提供者列表的变化情况,保证消费者始终调用到可用的服务提供者。

总结

  • 在手写RPC框架中,注册中心实现了共享机制、心跳机制和监听机制来确保服务提供者信息的存储和共享、健康状态的监测以及变化的监听。
  • 通过共享机制,服务提供者的信息可以被多个节点访问和更新;
  • 通过心跳机制,注册中心可以判断服务提供者的健康状态;
  • 通过监听机制,消费者可以实时获取最新的服务提供者列表。

这三个机制协同工作,使得分布式系统能够实现高效、稳定和可扩展的服务注册、发现和路由。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值