diff --git a/pom.xml b/pom.xml index fe54244..f9e1ed5 100644 --- a/pom.xml +++ b/pom.xml @@ -14,8 +14,8 @@ 2.7.18 - - 2021.0.5.0 + + 2.2.0 true @@ -23,12 +23,22 @@ - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-config + com.alibaba.nacos + nacos-client + ${nacos.version} + + pure + + + + com.alibaba.nacos + nacos-common + ${nacos.version} - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-discovery + com.alibaba.nacos + nacos-api + ${nacos.version} @@ -62,13 +72,6 @@ pom import - - com.alibaba.cloud - spring-cloud-alibaba-dependencies - ${spring-cloud-alibaba.version} - pom - import - diff --git a/src/main/java/cn/com/xuxiaowei/nacos/sentinel/listener/NacosDiscoveryListener.java b/src/main/java/cn/com/xuxiaowei/nacos/sentinel/listener/NacosDiscoveryListener.java new file mode 100644 index 0000000..e637370 --- /dev/null +++ b/src/main/java/cn/com/xuxiaowei/nacos/sentinel/listener/NacosDiscoveryListener.java @@ -0,0 +1,88 @@ +package cn.com.xuxiaowei.nacos.sentinel.listener; + +import cn.com.xuxiaowei.nacos.sentinel.properties.NacosSentinelDiscoveryProperties; +import com.alibaba.nacos.api.PropertyKeyConst; +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.pojo.Instance; +import com.alibaba.nacos.api.naming.pojo.ListView; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Properties; + +/** + * Nacos 注册中心 监听程序 + * + * @author xuxiaowei + * @see 0.0.1 + */ +@Slf4j +@Component +public class NacosDiscoveryListener { + + private NacosSentinelDiscoveryProperties nacosSentinelDiscoveryProperties; + + @Autowired + public void setNacosSentinelDiscoveryProperties(NacosSentinelDiscoveryProperties nacosSentinelDiscoveryProperties) { + this.nacosSentinelDiscoveryProperties = nacosSentinelDiscoveryProperties; + } + + @EventListener(ApplicationReadyEvent.class) + public void ready() throws NacosException { + Properties properties = nacosSentinelDiscoveryProperties.getProperties(); + + log.info("{}: {}", PropertyKeyConst.SERVER_ADDR, properties.getProperty(PropertyKeyConst.SERVER_ADDR)); + log.info("{}: {}", PropertyKeyConst.NAMESPACE, properties.getProperty(PropertyKeyConst.NAMESPACE)); + + NamingService namingService = NamingFactory.createNamingService(properties); + + int pageNo = nacosSentinelDiscoveryProperties.getPageNo(); + int pageSize = nacosSentinelDiscoveryProperties.getPageSize(); + String groupName = nacosSentinelDiscoveryProperties.getGroupName(); + + ListView servicesOfServer = namingService.getServicesOfServer(pageNo, pageSize, groupName); + List serviceNames = servicesOfServer.getData(); + + log.info("service size: {}", serviceNames.size()); + + int maxLength = 0; + for (String serviceName : serviceNames) { + maxLength = Math.max(maxLength, serviceName.length()); + } + + log.info("service healthy:"); + for (String serviceName : serviceNames) { + List instanceOnline = namingService.selectInstances(serviceName, true); + List instanceOffline = namingService.selectInstances(serviceName, false); + log.info("{}:\ttrue: {}\tfalse: {}", String.format("%-" + maxLength + "s", serviceName), instanceOnline.size(), instanceOffline.size()); + } + + log.info("service instance:"); + for (String serviceName : serviceNames) { + List instanceOnline = namingService.selectInstances(serviceName, true); + if (!instanceOnline.isEmpty()) { + for (Instance instance : instanceOnline) { + String ip = instance.getIp(); + int port = instance.getPort(); + log.info("{} instance healthy true: {}:{}", String.format("%-" + maxLength + "s", serviceName), ip, port); + } + } + + List instanceOffline = namingService.selectInstances(serviceName, false); + if (!instanceOffline.isEmpty()) { + for (Instance instance : instanceOffline) { + String ip = instance.getIp(); + int port = instance.getPort(); + log.info("{} instance healthy false: {}:{}", String.format("%-" + maxLength + "s", serviceName), ip, port); + } + } + } + } + +} diff --git a/src/main/java/cn/com/xuxiaowei/nacos/sentinel/properties/NacosSentinelDiscoveryProperties.java b/src/main/java/cn/com/xuxiaowei/nacos/sentinel/properties/NacosSentinelDiscoveryProperties.java new file mode 100644 index 0000000..fd62a3a --- /dev/null +++ b/src/main/java/cn/com/xuxiaowei/nacos/sentinel/properties/NacosSentinelDiscoveryProperties.java @@ -0,0 +1,39 @@ +package cn.com.xuxiaowei.nacos.sentinel.properties; + +import com.alibaba.nacos.api.PropertyKeyConst; +import com.alibaba.nacos.api.common.Constants; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.Properties; + +/** + * Nacos 监控 注册中心 配置 + * + * @author xuxiaowei + * @since 0.0.1 + */ +@Data +@Component +@ConfigurationProperties("nacos.sentinel.discovery") +public class NacosSentinelDiscoveryProperties { + + private String serverAddr = "127.0.0.1:8848"; + + private String namespace = "public"; + + private int pageNo = 1; + + private int pageSize = Integer.MAX_VALUE; + + private String groupName = Constants.DEFAULT_GROUP; + + public Properties getProperties() { + Properties properties = new Properties(); + properties.setProperty(PropertyKeyConst.SERVER_ADDR, serverAddr); + properties.setProperty(PropertyKeyConst.NAMESPACE, namespace); + return properties; + } + +} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index d569169..1a695e8 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -2,18 +2,8 @@ spring: application: name: nacos-sentinel --- -spring: - config: - import: nacos:nacos-config-example.properties?refresh=true - cloud: - inetutils: - ignored-interfaces: - - VMware.* - - VirtualBox.* - nacos: - config: - server-addr: ${NACOS_SENTINEL_CONFIG_SERVER_ADDR:127.0.0.1:8848} - namespace: ${NACOS_SENTINEL_CONFIG_NAMESPACE:public} - discovery: - server-addr: ${NACOS_SENTINEL_DISCOVERY_SERVER_ADDR:127.0.0.1:8848} - namespace: ${NACOS_SENTINEL_DISCOVERY_NAMESPACE:public} +nacos: + sentinel: + discovery: + server-addr: ${NACOS_SENTINEL_DISCOVERY_SERVER_ADDR:127.0.0.1:8848} + namespace: ${NACOS_SENTINEL_DISCOVERY_NAMESPACE:public}