parent
c226e1d1c3
commit
69e5896da4
29
pom.xml
29
pom.xml
|
@ -14,8 +14,8 @@
|
|||
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies -->
|
||||
<spring-boot.version>2.7.18</spring-boot.version>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies -->
|
||||
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
|
||||
<!-- 2.1.2版本以上支持纯净版客户端 -->
|
||||
<nacos.version>2.2.0</nacos.version>
|
||||
|
||||
<skipTests>true</skipTests>
|
||||
|
||||
|
@ -23,12 +23,22 @@
|
|||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
<groupId>com.alibaba.nacos</groupId>
|
||||
<artifactId>nacos-client</artifactId>
|
||||
<version>${nacos.version}</version>
|
||||
<!-- 指定纯净版SDK -->
|
||||
<classifier>pure</classifier>
|
||||
</dependency>
|
||||
<!-- 使用纯净版时必须要引入同版本nacos-api和nacos-common,否则可能出现运行时找不到类的问题 -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.nacos</groupId>
|
||||
<artifactId>nacos-common</artifactId>
|
||||
<version>${nacos.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
<groupId>com.alibaba.nacos</groupId>
|
||||
<artifactId>nacos-api</artifactId>
|
||||
<version>${nacos.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
@ -62,13 +72,6 @@
|
|||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
|
||||
<version>${spring-cloud-alibaba.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
|
|
@ -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<String> servicesOfServer = namingService.getServicesOfServer(pageNo, pageSize, groupName);
|
||||
List<String> 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<Instance> instanceOnline = namingService.selectInstances(serviceName, true);
|
||||
List<Instance> 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<Instance> 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<Instance> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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}
|
||||
|
|
Loading…
Reference in New Issue