package com.github.ltsopensource.core.listener; import com.github.ltsopensource.core.AppContext; import com.github.ltsopensource.core.cluster.Node; import com.github.ltsopensource.core.commons.utils.CollectionUtils; import java.util.ArrayList; import java.util.List; /** * @author Robert HG (254963746@qq.com) on 8/23/14. * 用来监听 自己类型 节点的变化,用来选举master */ public class MasterElectionListener implements NodeChangeListener { private AppContext appContext; public MasterElectionListener(AppContext appContext) { this.appContext = appContext; } public void removeNodes(List<Node> nodes) { if (CollectionUtils.isEmpty(nodes)) { return; } // 只需要和当前节点相同的节点类型和组 List<Node> groupNodes = new ArrayList<Node>(); for (Node node : nodes) { if (isSameGroup(node)) { groupNodes.add(node); } } if (groupNodes.size() > 0) { appContext.getMasterElector().removeNode(groupNodes); } } public void addNodes(List<Node> nodes) { if (CollectionUtils.isEmpty(nodes)) { return; } // 只需要和当前节点相同的节点类型和组 List<Node> groupNodes = new ArrayList<Node>(); for (Node node : nodes) { if (isSameGroup(node)) { groupNodes.add(node); } } if (groupNodes.size() > 0) { appContext.getMasterElector().addNodes(groupNodes); } } /** * 是否和当前节点是相同的GROUP * * @param node * @return */ private boolean isSameGroup(Node node) { return node.getNodeType().equals(appContext.getConfig().getNodeType()) && node.getGroup().equals(appContext.getConfig().getNodeGroup()); } }