Explorar el Código

调整序列服务到order服务中取消序列服务

java110 hace 5 años
padre
commit
32e54be067

+ 47 - 0
java110-bean/src/main/java/com/java110/dto/idSeq/IdSeqDto.java

@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017-2020 吴学文 and java110 team.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.java110.dto.idSeq;
+
+import java.io.Serializable;
+
+/**
+ * @desc add by 吴学文 17:10
+ */
+public class IdSeqDto implements Serializable {
+
+    private String id;
+    private String prefix;
+
+    public IdSeqDto(String prefix) {
+        this.prefix = prefix;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+}

+ 6 - 25
java110-core/src/main/java/com/java110/core/factory/GenerateCodeFactory.java

@@ -1,14 +1,13 @@
 package com.java110.core.factory;
 
 import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.idSeq.IdSeqDto;
 import com.java110.intf.code.ICodeApi;
+import com.java110.intf.order.IIdSeqInnerServiceSMO;
 import com.java110.utils.cache.MappingCache;
 import com.java110.utils.constant.MappingConstant;
-import com.java110.utils.constant.ResponseConstant;
 import com.java110.utils.exception.GenerateCodeException;
-import com.java110.utils.exception.ResponseErrorException;
 import com.java110.utils.factory.ApplicationContextFactory;
-import com.java110.utils.util.Assert;
 import com.java110.utils.util.DateUtil;
 import org.springframework.web.client.RestTemplate;
 
@@ -326,29 +325,11 @@ public class GenerateCodeFactory {
      */
     private static String getCode(String prefix) throws GenerateCodeException {
         //调用服务
-        String code = "-1";
-        try {
-            String responseMessage = restTemplate().postForObject(MappingCache.getValue(MappingConstant.KEY_CODE_PATH),
-                    createCodeRequestJson(getTransactionId(), prefix, prefix).toJSONString(), String.class);
-
-            if (ResponseConstant.RESULT_CODE_ERROR.equals(responseMessage)) {
-                throw new ResponseErrorException(ResponseConstant.RESULT_CODE_ERROR, "生成oId编码失败");
-            }
-            Assert.jsonObjectHaveKey(responseMessage, "code", "编码生成系统 返回报文错误" + responseMessage);
-
-            JSONObject resJson = JSONObject.parseObject(responseMessage);
-
-            if (!ResponseConstant.RESULT_CODE_SUCCESS.equals(resJson.getString("code"))) {
-                throw new ResponseErrorException(resJson.getString("code"), "生成oId编码失败 "
-                        + resJson.getString("message"));
-            }
-            code = resJson.getString("id");
-        } catch (Exception e) {
-            throw new GenerateCodeException(ResponseConstant.RESULT_CODE_ERROR, e.getMessage());
-        } finally {
-            return code;
-        }
+        IIdSeqInnerServiceSMO idSeqInnerServiceSMOImpl = ApplicationContextFactory.getBean(IIdSeqInnerServiceSMO.class.getName(), IIdSeqInnerServiceSMO.class);
+        IdSeqDto idSeqDto = new IdSeqDto(prefix);
+        idSeqDto = idSeqInnerServiceSMOImpl.generateCode(idSeqDto);
 
+        return idSeqDto.getId();
     }
 
     public static String getBId() throws GenerateCodeException {

+ 35 - 0
java110-interface/src/main/java/com/java110/intf/order/IIdSeqInnerServiceSMO.java

@@ -0,0 +1,35 @@
+package com.java110.intf.order;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.config.feign.FeignConfiguration;
+import com.java110.dto.idSeq.IdSeqDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+/**
+ * 用户信息管理,服务
+ * Created by wuxw on 2017/4/5.
+ */
+@FeignClient(name = "order-service", configuration = {FeignConfiguration.class})
+@RequestMapping("/idSeq")
+public interface IIdSeqInnerServiceSMO {
+
+    /**
+     * 根据sequence 表中name 查询ID
+     *
+     * @param primaryKeyInfo name信息封装
+     * @return
+     */
+    @RequestMapping(value = "/queryPrimaryKey", method = RequestMethod.POST)
+    public JSONObject queryPrimaryKey(@RequestBody JSONObject primaryKeyInfo) throws Exception;
+
+    /**
+     * 生成编码
+     * @param idSeqDto
+     * @throws Exception
+     */
+    @RequestMapping(value = "/generateCode", method = RequestMethod.POST)
+    public IdSeqDto generateCode(@RequestBody IdSeqDto idSeqDto) ;
+}

+ 4 - 1
service-order/pom.xml

@@ -27,7 +27,10 @@
             <artifactId>java110-service</artifactId>
         </dependency>
 
-
+        <dependency>
+            <groupId>org.apache.zookeeper</groupId>
+            <artifactId>zookeeper</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>com.java110</groupId>

+ 101 - 9
service-order/src/main/java/com/java110/order/OrderServiceApplicationStart.java

@@ -15,14 +15,22 @@
  */
 package com.java110.order;
 
-import com.java110.utils.cache.MappingCache;
-import com.java110.utils.factory.ApplicationContextFactory;
-import com.java110.utils.util.StringUtil;
+import com.java110.config.properties.code.ZookeeperProperties;
 import com.java110.core.annotation.Java110ListenerDiscovery;
 import com.java110.core.client.RestTemplate;
 import com.java110.core.event.center.DataFlowEventPublishing;
 import com.java110.order.smo.ICenterServiceCacheSMO;
+import com.java110.service.init.ServiceInfoListener;
 import com.java110.service.init.ServiceStartInit;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.MappingConstant;
+import com.java110.utils.constant.ResponseConstant;
+import com.java110.utils.exception.StartException;
+import com.java110.utils.factory.ApplicationContextFactory;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
+import org.apache.zookeeper.*;
+import org.apache.zookeeper.data.Stat;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.SpringApplication;
@@ -35,7 +43,10 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.converter.StringHttpMessageConverter;
 
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.nio.charset.Charset;
+import java.util.List;
 
 
 /**
@@ -48,7 +59,7 @@ import java.nio.charset.Charset;
  * @tag
  */
 @SpringBootApplication(scanBasePackages = {"com.java110.service", "com.java110.order",
-        "com.java110.core", "com.java110.core.event.order", "com.java110.config.properties.code","com.java110.db"})
+        "com.java110.core", "com.java110.core.event.order", "com.java110.config.properties.code", "com.java110.db"})
 @EnableDiscoveryClient
 //@EnableConfigurationProperties(EventProperties.class)
 @Java110ListenerDiscovery(listenerPublishClass = DataFlowEventPublishing.class,
@@ -62,7 +73,7 @@ import java.nio.charset.Charset;
 })
 public class OrderServiceApplicationStart {
 
-    private  static Logger logger = LoggerFactory.getLogger(OrderServiceApplicationStart.class);
+    private static Logger logger = LoggerFactory.getLogger(OrderServiceApplicationStart.class);
 
     /**
      * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
@@ -101,8 +112,11 @@ public class OrderServiceApplicationStart {
 
             //刷新缓存
             flushMainCache(args);
-        }catch (Throwable e){
-            logger.error("系统启动失败",e);
+
+            //加载workId
+            loadWorkId();
+        } catch (Throwable e) {
+            logger.error("系统启动失败", e);
         }
     }
 
@@ -118,10 +132,10 @@ public class OrderServiceApplicationStart {
 
         //因为好多朋友启动时 不加 参数-Dcache 所以启动时检测 redis 中是否存在 java110_hc_version
         String mapping = MappingCache.getValue("java110_hc_version");
-        if(StringUtil.isEmpty(mapping)){
+        if (StringUtil.isEmpty(mapping)) {
             ICenterServiceCacheSMO centerServiceCacheSMO = (ICenterServiceCacheSMO) ApplicationContextFactory.getBean("centerServiceCacheSMOImpl");
             centerServiceCacheSMO.startFlush();
-            return ;
+            return;
         }
 
         if (args == null || args.length == 0) {
@@ -135,4 +149,82 @@ public class OrderServiceApplicationStart {
             }
         }
     }
+
+    /**
+     * 加载 workId
+     */
+    public static void loadWorkId() throws StartException {
+
+        if (!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))) {
+            return;
+        }
+        ZookeeperProperties zookeeperProperties = ApplicationContextFactory.getBean("zookeeperProperties", ZookeeperProperties.class);
+
+        if (zookeeperProperties == null) {
+            throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,未加载zookeeper 配置信息");
+        }
+
+        String host = null;
+        try {
+            host = InetAddress.getLocalHost().getHostAddress();
+        } catch (UnknownHostException e) {
+            throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,获取host失败" + e);
+        }
+
+        ServiceInfoListener serviceInfoListener = ApplicationContextFactory.getBean("serviceInfoListener", ServiceInfoListener.class);
+
+        if (serviceInfoListener == null) {
+            throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,获取服务监听端口失败");
+        }
+
+        serviceInfoListener.setServiceHost(host);
+
+        try {
+            ZooKeeper zooKeeper = new ZooKeeper(zookeeperProperties.getZookeeperConnectString(), zookeeperProperties.getTimeOut(), new Watcher() {
+
+                @Override
+                public void process(WatchedEvent watchedEvent) {
+
+                }
+            });
+
+
+            Stat stat = zooKeeper.exists(zookeeperProperties.getWorkDir(), true);
+
+            if (stat == null) {
+                zooKeeper.create(zookeeperProperties.getWorkDir(), "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
+                        CreateMode.PERSISTENT);
+            }
+            String workDir = "";
+            List<String> workDirs = zooKeeper.getChildren(zookeeperProperties.getWorkDir(), true);
+
+            if (workDirs != null && workDirs.size() > 0) {
+                for (String workDirTemp : workDirs) {
+                    if (workDirTemp.startsWith(serviceInfoListener.getHostPort())) {
+                        workDir = workDirTemp;
+                        break;
+                    }
+                }
+            }
+            if (StringUtil.isNullOrNone(workDir)) {
+                workDir = zooKeeper.create(zookeeperProperties.getWorkDir() + "/" + serviceInfoListener.getHostPort(), "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
+                        CreateMode.PERSISTENT_SEQUENTIAL);
+            }
+
+            String[] pathTokens = workDir.split("/");
+            if (pathTokens.length > 0
+                    && pathTokens[pathTokens.length - 1].contains("-")
+                    && pathTokens[pathTokens.length - 1].contains(":")) {
+                String workId = pathTokens[pathTokens.length - 1].substring(pathTokens[pathTokens.length - 1].indexOf("-") + 1);
+                serviceInfoListener.setWorkId(Long.parseLong(workId));
+            }
+
+            Assert.hasLength(serviceInfoListener.getWorkId() + "", "系统中加载workId 失败");
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,链接zookeeper失败" + zookeeperProperties.getZookeeperConnectString());
+        }
+
+
+    }
 }

+ 14 - 0
service-order/src/main/java/com/java110/order/dao/ISnowflakeldWorker.java

@@ -0,0 +1,14 @@
+package com.java110.order.dao;
+
+/**
+ * Created by wuxw on 2018/6/3.
+ */
+public interface ISnowflakeldWorker {
+
+    /**
+     * 根据前缀生成ID
+     * @param prefix
+     * @return
+     */
+    public String getIdByPrefix(String prefix,long workId);
+}

+ 213 - 0
service-order/src/main/java/com/java110/order/dao/impl/SnowflakeIdWorkerImpl.java

@@ -0,0 +1,213 @@
+package com.java110.order.dao.impl;
+
+
+/**
+ * Twitter_Snowflake<br>
+ * SnowFlake的结构如下(每部分用-分开):<br>
+ * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 <br>
+ * 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0<br>
+ * 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截)
+ * 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69<br>
+ * 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId和5位workerId<br>
+ * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号<br>
+ * 加起来刚好64位,为一个Long型。<br>
+ * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。
+ */
+
+import com.java110.order.dao.ISnowflakeldWorker;
+import com.java110.utils.constant.ResponseConstant;
+import com.java110.utils.exception.DAOException;
+import com.java110.utils.log.LoggerEngine;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by wuxw on 2018/5/28.
+ */
+@Service
+public class SnowflakeIdWorkerImpl extends LoggerEngine implements ISnowflakeldWorker {
+
+    protected final static Logger logger = LoggerFactory.getLogger(SnowflakeIdWorkerImpl.class);
+
+
+    // ==============================Fields===========================================
+    /**
+     * 开始时间截 (2015-01-01)
+     */
+    private final long twepoch = 1420041600000L;
+
+    /**
+     * 机器id所占的位数
+     */
+    //private final long workerIdBits = 5L;
+    private final long workerIdBits = 10L;
+
+    /** 数据标识id所占的位数 */
+    // private final long datacenterIdBits = 5L;
+
+    /**
+     * 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数)
+     */
+    private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
+
+    /** 支持的最大数据标识id,结果是31 */
+    // private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
+
+    /**
+     * 序列在id中占的位数
+     */
+    private final long sequenceBits = 12L;
+
+    /**
+     * 机器ID向左移12位
+     */
+    private final long workerIdShift = sequenceBits;
+
+    /**
+     * 数据标识id向左移17位(12+5)
+     */
+    private final long datacenterIdShift = sequenceBits + workerIdBits;
+
+    /**
+     * 时间截向左移22位(5+5+12)
+     */
+    private final long timestampLeftShift = sequenceBits + workerIdBits;//+ datacenterIdBits;
+
+    /**
+     * 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095)
+     */
+    private final long sequenceMask = -1L ^ (-1L << sequenceBits);
+
+    /**
+     * 工作机器ID(0~31)
+     */
+    private long workerId;
+
+    /**
+     * 数据中心ID(0~31)
+     */
+    private long datacenterId;
+
+    /**
+     * 毫秒内序列(0~4095)
+     */
+    private long sequence = 0L;
+
+    /**
+     * 上次生成ID的时间截
+     */
+    private long lastTimestamp = -1L;
+
+    //==============================Constructors=====================================
+
+    /**
+     * 构造函数
+     */
+    public SnowflakeIdWorkerImpl() {
+
+    }
+
+    // ==============================Methods==========================================
+
+    /**
+     * 获得下一个ID (该方法是线程安全的)
+     *
+     * @param workerId 工作ID (0~1024)
+     * @return SnowflakeId
+     */
+    public synchronized long nextId(long workerId) {
+
+        if (workerId > maxWorkerId || workerId < 0) {
+            throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));
+        }
+       /* if (datacenterId > maxDatacenterId || datacenterId < 0) {
+            throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));
+        }*/
+        this.workerId = workerId;
+        /*  this.datacenterId = datacenterId;*/
+
+        long timestamp = timeGen();
+
+        //如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常
+        if (timestamp < lastTimestamp) {
+            throw new RuntimeException(
+                    String.format("Clock moved backwards.  Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
+        }
+
+        //如果是同一时间生成的,则进行毫秒内序列
+        if (lastTimestamp == timestamp) {
+            sequence = (sequence + 1) & sequenceMask;
+            //毫秒内序列溢出
+            if (sequence == 0) {
+                //阻塞到下一个毫秒,获得新的时间戳
+                timestamp = tilNextMillis(lastTimestamp);
+            }
+        }
+        //时间戳改变,毫秒内序列重置
+        else {
+            sequence = 0L;
+        }
+
+        //上次生成ID的时间截
+        lastTimestamp = timestamp;
+
+        //移位并通过或运算拼到一起组成64位的ID
+        return ((timestamp - twepoch) << timestampLeftShift) //
+                //| (datacenterId << datacenterIdShift) //
+                | (workerId << workerIdShift) //
+                | sequence;
+    }
+
+    /**
+     * 阻塞到下一个毫秒,直到获得新的时间戳
+     *
+     * @param lastTimestamp 上次生成ID的时间截
+     * @return 当前时间戳
+     */
+    protected long tilNextMillis(long lastTimestamp) {
+        long timestamp = timeGen();
+        while (timestamp <= lastTimestamp) {
+            timestamp = timeGen();
+        }
+        return timestamp;
+    }
+
+    /**
+     * 返回以毫秒为单位的当前时间
+     *
+     * @return 当前时间(毫秒)
+     */
+    protected long timeGen() {
+        return System.currentTimeMillis();
+    }
+
+    //==============================Test=============================================
+
+    /**
+     * 测试
+     */
+    public static void main(String[] args) {
+        SnowflakeIdWorkerImpl idWorker = new SnowflakeIdWorkerImpl();
+        for (int i = 0; i < 1000; i++) {
+            long id = idWorker.nextId(0);
+            System.out.println(Long.toBinaryString(id));
+            System.out.println(id);
+        }
+    }
+
+    @Override
+    public String getIdByPrefix(String prefix, long workId) throws DAOException {
+        String id = prefix;
+        try {
+            id += nextId(workId);
+        } catch (Exception e) {
+            logger.error("生成主键ID异常" + prefix, e);
+            throw new DAOException(ResponseConstant.RESULT_CODE_INNER_ERROR, "生成主键ID异常" + prefix + e);
+        } finally {
+            return id;
+        }
+    }
+
+
+}

+ 76 - 0
service-order/src/main/java/com/java110/order/smo/impl/IdSeqInnerServiceSMOImpl.java

@@ -0,0 +1,76 @@
+package com.java110.order.smo.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.dto.idSeq.IdSeqDto;
+import com.java110.intf.order.IIdSeqInnerServiceSMO;
+import com.java110.order.dao.ISnowflakeldWorker;
+import com.java110.service.init.ServiceInfoListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * 用户服务信息管理业务信息实现
+ * Created by wuxw on 2017/4/5.
+ */
+@RestController
+public class IdSeqInnerServiceSMOImpl extends BaseServiceSMO implements IIdSeqInnerServiceSMO {
+    protected final static Logger logger = LoggerFactory.getLogger(IdSeqInnerServiceSMOImpl.class);
+
+
+    @Autowired
+    ISnowflakeldWorker snowflakeIdWorkerImpl;
+
+    @Autowired
+    private ServiceInfoListener serviceInfoListener;
+
+    /**
+     * 根据sequence 表中name 查询ID
+     *
+     * @param primaryKeyInfo name信息封装
+     * @return
+     */
+    public JSONObject queryPrimaryKey(@RequestBody  JSONObject primaryKeyInfo) throws Exception {
+        Map paramIn = JSONObject.toJavaObject(primaryKeyInfo, Map.class);
+//        Map primaryKey = iPrimaryKeyServiceDao.queryPrimaryKey(paramIn);
+//        JSONObject returnPrimaryKey = new JSONObject();
+//        if (primaryKey != null && primaryKey.containsKey("targetId")) {
+//            returnPrimaryKey.put("targetId", primaryKey.get("targetId"));
+//        } else {
+//            //如果没定义相应name的键序列,直接返回-1 表示 自己系统需要自己生成
+//            returnPrimaryKey.put("targetId", "-1");
+//        }
+        return null;
+    }
+
+    public IdSeqDto generateCode(@RequestBody  IdSeqDto idSeqDto) {
+        String code = snowflakeIdWorkerImpl.getIdByPrefix(idSeqDto.getPrefix(), serviceInfoListener.getWorkId());
+
+        idSeqDto.setId(code);
+
+        return idSeqDto;
+    }
+
+    public ServiceInfoListener getServiceInfoListener() {
+        return serviceInfoListener;
+    }
+
+    public void setServiceInfoListener(ServiceInfoListener serviceInfoListener) {
+        this.serviceInfoListener = serviceInfoListener;
+    }
+
+
+    public ISnowflakeldWorker getSnowflakeIdWorkerImpl() {
+        return snowflakeIdWorkerImpl;
+    }
+
+    public void setSnowflakeIdWorkerImpl(ISnowflakeldWorker snowflakeIdWorkerImpl) {
+        this.snowflakeIdWorkerImpl = snowflakeIdWorkerImpl;
+    }
+}

+ 1 - 74
service-sequence/src/main/java/com/java110/code/CodeServiceApplicationStart.java

@@ -81,83 +81,10 @@ public class CodeServiceApplicationStart {
 
         ServiceStartInit.initSystemConfig(context);
 
-        //加载workId
-        loadWorkId();
+
 
     }
 
 
-    /**
-     * 加载 workId
-     */
-    public static void loadWorkId() throws StartException {
-        ZookeeperProperties zookeeperProperties = ApplicationContextFactory.getBean("zookeeperProperties", ZookeeperProperties.class);
-
-        if (zookeeperProperties == null) {
-            throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,未加载zookeeper 配置信息");
-        }
-
-        String host = null;
-        try {
-            host = InetAddress.getLocalHost().getHostAddress();
-        } catch (UnknownHostException e) {
-            throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,获取host失败" + e);
-        }
-
-        ServiceInfoListener serviceInfoListener = ApplicationContextFactory.getBean("serviceInfoListener", ServiceInfoListener.class);
-
-        if (serviceInfoListener == null) {
-            throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,获取服务监听端口失败");
-        }
-
-        serviceInfoListener.setServiceHost(host);
-
-        try {
-            ZooKeeper zooKeeper = new ZooKeeper(zookeeperProperties.getZookeeperConnectString(), zookeeperProperties.getTimeOut(), new Watcher() {
-
-                @Override
-                public void process(WatchedEvent watchedEvent) {
-
-                }
-            });
-
-
-            Stat stat = zooKeeper.exists(zookeeperProperties.getWorkDir(), true);
-
-            if (stat == null) {
-                zooKeeper.create(zookeeperProperties.getWorkDir(), "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
-                        CreateMode.PERSISTENT);
-            }
-            String workDir = "";
-            List<String> workDirs = zooKeeper.getChildren(zookeeperProperties.getWorkDir(), true);
-
-            if (workDirs != null && workDirs.size() > 0) {
-                for (String workDirTemp : workDirs) {
-                    if (workDirTemp.startsWith(serviceInfoListener.getHostPort())) {
-                        workDir = workDirTemp;
-                        break;
-                    }
-                }
-            }
-            if (StringUtil.isNullOrNone(workDir)) {
-                workDir = zooKeeper.create(zookeeperProperties.getWorkDir() + "/" + serviceInfoListener.getHostPort(), "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
-                        CreateMode.PERSISTENT_SEQUENTIAL);
-            }
-
-            String[] pathTokens = workDir.split("/");
-            if (pathTokens.length > 0
-                    && pathTokens[pathTokens.length - 1].contains("-")
-                    && pathTokens[pathTokens.length - 1].contains(":")) {
-                String workId = pathTokens[pathTokens.length - 1].substring(pathTokens[pathTokens.length - 1].indexOf("-") + 1);
-                serviceInfoListener.setWorkId(Long.parseLong(workId));
-            }
-
-            Assert.hasLength(serviceInfoListener.getWorkId() + "", "系统中加载workId 失败");
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new StartException(ResponseConstant.RESULT_CODE_ERROR, "系统启动失败,链接zookeeper失败" + zookeeperProperties.getZookeeperConnectString());
-        }
 
-
-    }
 }