package com.lememo.namingglance; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingFactory; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.listener.Event; import com.alibaba.nacos.api.naming.listener.EventListener; import com.alibaba.nacos.api.naming.listener.NamingEvent; import com.alibaba.nacos.api.naming.pojo.Instance; import java.io.IOException; import java.util.List; import java.util.Properties; /** * 模拟一个服务消费者 * 向 Nacos 监听服务 * * @author houyi **/ public class ServiceConsumer { public static void main(String[] args) throws NacosException { Properties properties = new Properties(); properties.setProperty("serverAddr", Constants.NACOS_SERVER_ADDRESS); properties.setProperty("namespace", Constants.NAMESPACE); NamingService naming = NamingFactory.createNamingService(properties); naming.subscribe(Constants.SERVICE_NAME, new EventListener() { @Override public void onEvent(Event event) { NamingEvent namingEvent = (NamingEvent) event; printInstances(namingEvent); mockConsume(naming, Constants.SERVICE_NAME); } }); try { int in = System.in.read(); } catch (IOException e) { e.printStackTrace(); } } public static void mockConsume(NamingService naming, String serviceName) { int i = 0, loop = 5; try { while (i++ < loop) { Instance instance = naming.selectOneHealthyInstance(serviceName); if (instance != null) { System.out.println("get one healthy instance of service:" + serviceName + "\nip=" + instance.getIp() + ", port=" + instance.getPort() + ", cluster=" + instance.getClusterName() + "\n=========================================\n"); } } } catch (Exception e) { e.printStackTrace(); } } public static void printInstances(NamingEvent namingEvent) { List<Instance> instanceList = namingEvent.getInstances(); StringBuilder sb = new StringBuilder(); sb.append("[\n"); int i = 0, s = instanceList.size(); for (Instance instance : instanceList) { sb.append("\t").append(instance); if (i++ < s - 1) { sb.append(",").append("\n"); } } sb.append("\n]"); System.out.println("===========receive new service===========\nserviceName=" + namingEvent.getServiceName() + "\ninstance size=" + instanceList.size() + "\ninstance list=" + sb.toString() + "\n=========================================\n"); } }