首页>代码>SpringBoot2整合Apache Zookeeper集群管理、负载均衡功能代码>/zookeeper-demo1/src/main/java/com/test/distributed/ImLoadBalance.java
package com.test.distributed; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.curator.framework.CuratorFramework; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.parser.Feature; /** * 负载均衡节点获取 * @author 程就人生 * @date 2020年1月13日 */ @Component public class ImLoadBalance { private static Logger log = LoggerFactory.getLogger(ImLoadBalance.class); @Value("${zookeeper.register.node}") private String managerPath; @Autowired private CuratorFramework zkClient; /** * 获取负载最小的IM节点 * * @return */ public ImNode getBestWorker() { List<ImNode> workers = getWorkers(); log.info("全部节点如下:"); workers.stream().forEach(node -> { log.info("节点信息:{}",JSONObject.toJSONString(node)); }); ImNode best = balance(workers); return best; } /** * 按照负载排序 * * @param items 所有的节点 * @return 负载最小的IM节点 */ protected ImNode balance(List<ImNode> items) { if (items.size() > 0) { // 根据balance值由小到大排序 Collections.sort(items); // 返回balance值最小的那个 ImNode node = items.get(0); log.info("最佳的节点为:{}",JSONObject.toJSONString(node)); return node; } else { return null; } } /** * 从zookeeper中拿到所有IM节点 */ protected List<ImNode> getWorkers() { List<ImNode> workers = new ArrayList<ImNode>(); List<String> children = null; try { children = zkClient.getChildren().forPath(managerPath); } catch (Exception e) { e.printStackTrace(); return workers; } for (String child : children) { log.info("child:"+child); byte[] payload = null; try { payload = zkClient.getData().forPath(managerPath+"/"+child); } catch (Exception e) { e.printStackTrace(); } if (null == payload) { continue; } ImNode worker = JSONObject.parseObject(payload, ImNode.class, Feature.AllowArbitraryCommas); workers.add(worker); } return workers; } }


xianyu091012 LV5
2024年11月18日
fellowfun LV12
2023年9月1日
心如止水 LV17
2023年8月15日
yzshabzbbdvw LV4
2023年6月3日
lironggang LV38
2023年3月28日
zxc131313 LV12
2023年2月2日
bibibi234 LV1
2022年12月5日
xiaoyuer2 LV8
2022年11月20日
Hachi6 LV13
2022年9月19日
别胡思乱想啦
2022年6月18日
暂无贡献等级