TCP-IP学习笔记十:RPC架构WebService加入Zookeeper集群的管理

本文介绍了如何在RPC架构的WebService中整合Zookeeper集群管理,包括服务器端和客户端的代码修改,如在启动时将服务器信息注入Zookeeper,客户端实现动态获取可用服务器IP和端口,以及异常重试机制。提供了服务器和客户端的配置文件示例,并提及源码中包含测试代码。
摘要由CSDN通过智能技术生成

TCP-IP学习笔记十:RPC架构WebService加入Zookeeper集群的管理

标签(空格分隔): TCP-IP Zookeeper


一、前言

    了解了Zookeeper的使用场景之后,可以对RPC架构的WebService加入到Zookeeper中进行管理。实现服务器上线自动注册,进而通知客户度知道可以调度哪些服务器,同时服务器下线,通知客户端哪些服务器不可用。这一点也是利用了Zookeeper可以监控每个节点数据的变化和子节点变化的特点。
    我们可已经服务器的启动注册到Zookeeper中,Zookeeper相当于一个注册中心,监控每个节点的数据和子节点的变化,监控到变化就通知到各个客户端。客户端启动从Zookeeper动态获取可用服务器列表,Zookeeper检测到变化的时候可以动态的通知客户度哪些服务器不可用或者新的服务器加入。

二、具体的代码实施

  1. 服务器端的修改
    注入服务器IP:端口号,和Znode(应用所在的路径),在服务器启动的时候注入到Zookeeper中。
    在NIOServerBootstrap的线程启动下添加如下代码:

     client=new ZkClient(servers);
        //判断节点是否存在,不存在则创建
        if(!client.exists(serverPath)){
            client.createPersistent(serverPath,true);
        }
        //注册服务
        String tmpPath=serverPath+"/"+ InetAddress.getLocalHost().getHostAddress()+":"+port;
        //判断节点是否存在,不存在则创建
        if(!client.exists(tmpPath)){
            client.createEphemeral(tmpPath);
        }
  2. 客户端的修改
    添加InvokeLoadBalancer类,获得可用连接和负载均衡策略。
    负载均衡策略有很多实现方式(有很多算法),这里使用简单的随机数的方式实现。

    package com.motui.rpc.client;
    
    import org.I0Itec.zkclient.IZkChildListener;
    import org.I0Itec.zkclient.ZkClient;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    /**
     * Created by MOTUI on 2016/10/24.
     *
     *  获取可用连接和实现负载均衡
     */
    public class InvokeLoadBalancer implements Serializable {
         
    
        //存储可用的服务列表
        private static List<HostAndPort> hostAndPorts;
        private ZkClient zkClient;
        //监听的节点路径
        private String serverPath;
    
        public InvokeLoadBalancer(String servers,String serverPath){
            this.serverPath = serverPath;
            this.zkClient = new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值