eclipse导出maven工程的可执行jar包 (3)

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.data.Stat;

/**
* 某分布式系统中,主节点可以有多台,可以动态上下线;
* 任意一台客户端都能实时感知到主节点服务器的上下线。
* Created by tianjun on 2016/12/19 0019.
*/
public class AppClient {
  private String groupNode = "sgroup";
  private ZooKeeper zk;
  private Stat stat = new Stat();
  private volatile List<String> serverList;

  /**
  * 连接zookeeper
  */
  public void connectZookeeper() throws Exception {
    zk = new ZooKeeper("127.0.0.1:2181", 5000, new Watcher() {
        public void process(WatchedEvent event) {
          // 如果发生了"/sgroup"节点下的子节点变化事件, 更新server列表, 并重新注册监听
          if (event.getType() == EventType.NodeChildrenChanged
              && ("http://www.likecs.com/" + groupNode).equals(event.getPath())) {
            try {
              updateServerList();
            } catch (Exception e) {
              e.printStackTrace();
            }
          }
        }
    });

    updateServerList();
  }

  /**
  * 更新server列表
  */
  private void updateServerList() throws Exception {
    List<String> newServerList = new ArrayList<String>();

    // 获取并监听groupNode的子节点变化
    // watch参数为true, 表示监听子节点变化事件.
    // 每次都需要重新注册监听, 因为一次注册, 只能监听一次事件, 如果还想继续保持监听, 必须重新注册
    List<String> subList = zk.getChildren("http://www.likecs.com/" + groupNode, true);
    for (String subNode : subList) {
      // 获取每个子节点下关联的server地址
      byte[] data = zk.getData("http://www.likecs.com/" + groupNode + "http://www.likecs.com/" + subNode, false, stat);
      newServerList.add(new String(data, "utf-8"));
    }

    // 替换server列表
    serverList = newServerList;

    System.out.println("server list updated: " + serverList);
  }

  /**
  * client的工作逻辑写在这个方法中
  * 此处不做任何处理, 只让client sleep
  */
  public void handle() throws InterruptedException {
    Thread.sleep(Long.MAX_VALUE);
  }

  public static void main(String[] args) throws Exception {
    AppClient ac = new AppClient();
    ac.connectZookeeper();

    ac.handle();
  }

}

右键待导出的maven工程-> Export -> Java -> Runnable JAR file,单击next

eclipse导出maven工程的可执行jar包

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdwxg.html