美文网首页
【Vesta发号器源码】IpConfigurableMachin

【Vesta发号器源码】IpConfigurableMachin

作者: DeanChangDM | 来源:发表于2019-05-13 14:12 被阅读0次

    Vesta发号器源码解析——IpConfigurableMachineIdProvider

    利用IP持有machineId的模式

    字段和属性

        //日志
        private static final Logger log = LoggerFactory
                .getLogger(IpConfigurableMachineIdProvider.class);
    
        //MachineId存储
        private long machineId;
        
        //ip映射表
        private Map<String, Long> ipsMap = new HashMap<String, Long>();
        
        //默认无参构造方法
        //记录日志
        public IpConfigurableMachineIdProvider() {
            log.debug("IpConfigurableMachineIdProvider constructed.");
        }
        
        //根据参数ips,ip信息构造
        public IpConfigurableMachineIdProvider(String ips) {
            //解析并处理IP
            setIps(ips);
            //初始化
            init();
        }
    

    初始化方法

        public void init() {
            //读取主机IP地址
            String ip = IpUtils.getHostIp();
            //判断ip地址是否取到,如果没取到抛出异常,记录日志,终止初始化
            if (StringUtils.isEmpty(ip)) {
                String msg = "Fail to get host IP address. Stop to initialize the IpConfigurableMachineIdProvider provider.";
    
                log.error(msg);
                throw new IllegalStateException(msg);
            }
            
            //判断IP是否有记录,如果没有,记录日志抛出异常
            if (!ipsMap.containsKey(ip)) {
                String msg = String
                        .format("Fail to configure ID for host IP address %s. Stop to initialize the IpConfigurableMachineIdProvider provider.",
                                ip);
    
                log.error(msg);
                throw new IllegalStateException(msg);
            }
            
            //获取IP对应的id
            machineId = ipsMap.get(ip);
            //记录日志
            log.info("IpConfigurableMachineIdProvider.init ip {} id {}", ip,
                    machineId);
        }
    

    设置IPs

    
        public void setIps(String ips) {
            log.debug("IpConfigurableMachineIdProvider ips {}", ips);
            //参数校验
            if (!StringUtils.isEmpty(ips)) {
                //逗号分隔的ip地址列表
                String[] ipArray = ips.split(",");
                //分配ID
                for (int i = 0; i < ipArray.length; i++) {
                    ipsMap.put(ipArray[i], (long) i);
                }
            }
        }
    

    getter和setter

        public long getMachineId() {
            return machineId;
        }
    
        public void setMachineId(long machineId) {
            this.machineId = machineId;
        }
    

    相关文章

      网友评论

          本文标题:【Vesta发号器源码】IpConfigurableMachin

          本文链接:https://www.haomeiwen.com/subject/beblaqtx.html