format
This commit is contained in:
parent
d39aed4086
commit
e81ba055ac
|
@ -0,0 +1,2 @@
|
|||
# https://github.com/spring-io/spring-javaformat/#java-8-support
|
||||
java-baseline=8
|
11
pom.xml
11
pom.xml
|
@ -22,6 +22,11 @@
|
|||
<!-- 2.1.2版本以上支持纯净版客户端 -->
|
||||
<nacos.version>2.2.0</nacos.version>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/io.spring.javaformat/spring-javaformat-maven-plugin -->
|
||||
<!-- https://github.com/spring-io/spring-javaformat/ -->
|
||||
<!-- 高版本支持 JDK 8:https://github.com/spring-io/spring-javaformat/#java-8-support -->
|
||||
<spring-javaformat-maven-plugin.version>0.0.41</spring-javaformat-maven-plugin.version>
|
||||
|
||||
<skipTests>true</skipTests>
|
||||
|
||||
</properties>
|
||||
|
@ -82,6 +87,12 @@
|
|||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>io.spring.javaformat</groupId>
|
||||
<artifactId>spring-javaformat-maven-plugin</artifactId>
|
||||
<version>${spring-javaformat-maven-plugin.version}</version>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cn.com.xuxiaowei.nacos.sentinel.listener;
|
||||
|
||||
import cn.com.xuxiaowei.nacos.sentinel.properties.NacosSentinelDiscoveryProperties;
|
||||
import cn.com.xuxiaowei.nacos.sentinel.utils.StringUtils;
|
||||
import com.alibaba.nacos.api.PropertyKeyConst;
|
||||
import com.alibaba.nacos.api.exception.NacosException;
|
||||
import com.alibaba.nacos.api.naming.NamingFactory;
|
||||
|
@ -8,6 +9,7 @@ import com.alibaba.nacos.api.naming.NamingService;
|
|||
import com.alibaba.nacos.api.naming.listener.NamingEvent;
|
||||
import com.alibaba.nacos.api.naming.pojo.Instance;
|
||||
import com.alibaba.nacos.api.naming.pojo.ListView;
|
||||
import com.alibaba.nacos.client.constant.Constants;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
|
@ -21,84 +23,113 @@ import java.util.Properties;
|
|||
* Nacos 注册中心 监听程序
|
||||
*
|
||||
* @author xuxiaowei
|
||||
* @see 0.0.1
|
||||
* @since 0.0.1
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class NacosDiscoveryListener {
|
||||
|
||||
private NacosSentinelDiscoveryProperties nacosSentinelDiscoveryProperties;
|
||||
private NacosSentinelDiscoveryProperties nacosSentinelDiscoveryProperties;
|
||||
|
||||
@Autowired
|
||||
public void setNacosSentinelDiscoveryProperties(NacosSentinelDiscoveryProperties nacosSentinelDiscoveryProperties) {
|
||||
this.nacosSentinelDiscoveryProperties = nacosSentinelDiscoveryProperties;
|
||||
}
|
||||
@Autowired
|
||||
public void setNacosSentinelDiscoveryProperties(NacosSentinelDiscoveryProperties nacosSentinelDiscoveryProperties) {
|
||||
this.nacosSentinelDiscoveryProperties = nacosSentinelDiscoveryProperties;
|
||||
}
|
||||
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void ready() throws NacosException {
|
||||
Properties properties = nacosSentinelDiscoveryProperties.getProperties();
|
||||
private NamingService namingService;
|
||||
|
||||
log.info("{}: {}", PropertyKeyConst.SERVER_ADDR, properties.getProperty(PropertyKeyConst.SERVER_ADDR));
|
||||
log.info("{}: {}", PropertyKeyConst.NAMESPACE, properties.getProperty(PropertyKeyConst.NAMESPACE));
|
||||
private void createNamingService() {
|
||||
if (!(namingService != null && Constants.HealthCheck.UP.equals(namingService.getServerStatus()))) {
|
||||
Properties properties = nacosSentinelDiscoveryProperties.getProperties();
|
||||
String serverAddr = properties.getProperty(PropertyKeyConst.SERVER_ADDR);
|
||||
String namespace = properties.getProperty(PropertyKeyConst.NAMESPACE);
|
||||
|
||||
NamingService namingService = NamingFactory.createNamingService(properties);
|
||||
log.info("");
|
||||
log.info("Nacos 连接地址: {}", serverAddr);
|
||||
log.info("Nacos 命名空间: {}", namespace);
|
||||
log.info("");
|
||||
|
||||
int pageNo = nacosSentinelDiscoveryProperties.getPageNo();
|
||||
int pageSize = nacosSentinelDiscoveryProperties.getPageSize();
|
||||
String groupName = nacosSentinelDiscoveryProperties.getGroupName();
|
||||
try {
|
||||
namingService = NamingFactory.createNamingService(properties);
|
||||
}
|
||||
catch (NacosException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView<String> servicesOfServer = namingService.getServicesOfServer(pageNo, pageSize, groupName);
|
||||
List<String> serviceNames = servicesOfServer.getData();
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void ready() throws NacosException {
|
||||
|
||||
log.info("");
|
||||
log.info("service size: {}", serviceNames.size());
|
||||
createNamingService();
|
||||
|
||||
int maxLength = 0;
|
||||
for (String serviceName : serviceNames) {
|
||||
maxLength = Math.max(maxLength, serviceName.length());
|
||||
}
|
||||
int pageNo = nacosSentinelDiscoveryProperties.getPageNo();
|
||||
int pageSize = nacosSentinelDiscoveryProperties.getPageSize();
|
||||
String groupName = nacosSentinelDiscoveryProperties.getGroupName();
|
||||
|
||||
log.info("");
|
||||
log.info("service instance:");
|
||||
for (String serviceName : serviceNames) {
|
||||
healthy(maxLength, serviceName, namingService, true);
|
||||
healthy(maxLength, serviceName, namingService, false);
|
||||
}
|
||||
ListView<String> servicesOfServer = namingService.getServicesOfServer(pageNo, pageSize, groupName);
|
||||
List<String> serviceNames = servicesOfServer.getData();
|
||||
|
||||
log.info("");
|
||||
log.info("service healthy:");
|
||||
for (String serviceName : serviceNames) {
|
||||
List<Instance> instanceOnline = namingService.selectInstances(serviceName, true);
|
||||
List<Instance> instanceOffline = namingService.selectInstances(serviceName, false);
|
||||
log.info("{} service healthy:\ttrue: {}\tfalse: {}", String.format("%-" + maxLength + "s", serviceName), instanceOnline.size(), instanceOffline.size());
|
||||
}
|
||||
log.info("");
|
||||
log.info("Nacos 服务总数量: {}", serviceNames.size());
|
||||
|
||||
for (String serviceName : serviceNames) {
|
||||
namingService.subscribe(serviceName, event -> {
|
||||
log.info("");
|
||||
NamingEvent namingEvent = (NamingEvent) event;
|
||||
List<Instance> instances = namingEvent.getInstances();
|
||||
int maxLength = 0;
|
||||
for (String serviceName : serviceNames) {
|
||||
maxLength = Math.max(maxLength, serviceName.length());
|
||||
}
|
||||
|
||||
log.info("{} instance subscribe {} change: \tsize: {}", serviceName, namingEvent.getGroupName(), instances.size());
|
||||
log.info("");
|
||||
log.info("Nacos 服务实例:");
|
||||
for (String serviceName : serviceNames) {
|
||||
healthy(maxLength, serviceName, namingService, true);
|
||||
healthy(maxLength, serviceName, namingService, false);
|
||||
}
|
||||
|
||||
for (Instance instance : instances) {
|
||||
String ip = instance.getIp();
|
||||
int port = instance.getPort();
|
||||
log.info("{} instance subscribe {}: {}:{}", serviceName, namingEvent.getGroupName(), ip, port);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
log.info("");
|
||||
log.info("Nacos 服务健康状况:");
|
||||
for (String serviceName : serviceNames) {
|
||||
List<Instance> instanceOnline = namingService.selectInstances(serviceName, true);
|
||||
List<Instance> instanceOffline = namingService.selectInstances(serviceName, false);
|
||||
log.info("Nacos 服务名称: {},健康数量: {},不健康数量: {}", StringUtils.formatLength(serviceName, maxLength),
|
||||
StringUtils.formatLength(instanceOnline.size(), 2),
|
||||
StringUtils.formatLength(instanceOffline.size(), 2));
|
||||
}
|
||||
|
||||
private void healthy(int maxLength, String serviceName, NamingService namingService, boolean healthy) throws NacosException {
|
||||
List<Instance> instances = namingService.selectInstances(serviceName, healthy);
|
||||
if (!instances.isEmpty()) {
|
||||
for (Instance instance : instances) {
|
||||
String ip = instance.getIp();
|
||||
int port = instance.getPort();
|
||||
log.info("{} service instance healthy {}: {}:{} {}", String.format("%-" + maxLength + "s", serviceName), healthy, ip, port, instance.getServiceName());
|
||||
}
|
||||
}
|
||||
}
|
||||
for (String serviceName : serviceNames) {
|
||||
namingService.subscribe(serviceName, event -> {
|
||||
NamingEvent namingEvent = (NamingEvent) event;
|
||||
List<Instance> instances = namingEvent.getInstances();
|
||||
|
||||
log.info("");
|
||||
log.info("Nacos 服务订阅: {}", serviceName);
|
||||
log.info("Nacos 服务名称: {},服务数量: {},群组名称:{}", serviceName, instances.size(), namingEvent.getGroupName());
|
||||
|
||||
for (Instance instance : instances) {
|
||||
String ip = instance.getIp();
|
||||
int port = instance.getPort();
|
||||
String clusterName = instance.getClusterName();
|
||||
log.info("Nacos 服务名称: {},IP: {},端口: {},群组名称: {},集群名称: {}", serviceName,
|
||||
StringUtils.formatLength(ip, 15), StringUtils.formatLength(port, 5),
|
||||
namingEvent.getGroupName(), clusterName);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void healthy(int maxLength, String serviceName, NamingService namingService, boolean healthy)
|
||||
throws NacosException {
|
||||
List<Instance> instances = namingService.selectInstances(serviceName, healthy);
|
||||
if (!instances.isEmpty()) {
|
||||
for (Instance instance : instances) {
|
||||
String ip = instance.getIp();
|
||||
int port = instance.getPort();
|
||||
String clusterName = instance.getClusterName();
|
||||
log.info("Nacos 服务名称: {},健康状况: {},IP: {},端口: {},群组名称: {},集群名称: {}",
|
||||
StringUtils.formatLength(serviceName, maxLength), StringUtils.formatLength(healthy, 5),
|
||||
StringUtils.formatLength(ip, 15), StringUtils.formatLength(port, 5),
|
||||
StringUtils.extractAtLeft(instance.getServiceName()), clusterName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,21 +19,21 @@ import java.util.Properties;
|
|||
@ConfigurationProperties("nacos.sentinel.discovery")
|
||||
public class NacosSentinelDiscoveryProperties {
|
||||
|
||||
private String serverAddr = "127.0.0.1:8848";
|
||||
private String serverAddr = "127.0.0.1:8848";
|
||||
|
||||
private String namespace = "public";
|
||||
private String namespace = "public";
|
||||
|
||||
private int pageNo = 1;
|
||||
private int pageNo = 1;
|
||||
|
||||
private int pageSize = Integer.MAX_VALUE;
|
||||
private int pageSize = Integer.MAX_VALUE;
|
||||
|
||||
private String groupName = Constants.DEFAULT_GROUP;
|
||||
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;
|
||||
}
|
||||
public Properties getProperties() {
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(PropertyKeyConst.SERVER_ADDR, serverAddr);
|
||||
properties.setProperty(PropertyKeyConst.NAMESPACE, namespace);
|
||||
return properties;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
package cn.com.xuxiaowei.nacos.sentinel.utils;
|
||||
|
||||
/**
|
||||
* @author xuxiaowei
|
||||
* @since 0.0.1
|
||||
*/
|
||||
public class StringUtils {
|
||||
|
||||
/**
|
||||
* 补充字符串到指定长度,不足的部分使用空格代替
|
||||
* @param obj 字符串
|
||||
* @param length 指定长度
|
||||
* @return 返回指定长度的字符串
|
||||
*/
|
||||
public static String formatLength(Object obj, int length) {
|
||||
return String.format("%-" + length + "s", obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* 截取字符串中 @ 左侧的内容,若字符串无 @ 将返回原始值
|
||||
* @param str 字符串
|
||||
* @return 返回 字符串中 @ 左侧的内容,或者是原始值
|
||||
*/
|
||||
public static String extractAtLeft(String str) {
|
||||
if (str == null) {
|
||||
return null;
|
||||
}
|
||||
int atIndex = str.indexOf("@");
|
||||
if (atIndex != -1) {
|
||||
return str.substring(0, atIndex);
|
||||
}
|
||||
else {
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue