Upgrade nacos-client version and construct NacosDataSource by Properties (#348)
* Polish #272: upgrade nacos-client version and create a new constructor for NacosDataSource to support namespace, endpoint, ak, sk and so on * check properties in NacosDataSource
This commit is contained in:
parent
af3360948d
commit
4592c45741
|
|
@ -13,7 +13,7 @@
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<nacos.version>0.2.1</nacos.version>
|
<nacos.version>0.6.2</nacos.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package com.alibaba.csp.sentinel.datasource.nacos;
|
package com.alibaba.csp.sentinel.datasource.nacos;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
|
|
@ -25,8 +26,10 @@ import com.alibaba.csp.sentinel.concurrent.NamedThreadFactory;
|
||||||
import com.alibaba.csp.sentinel.datasource.AbstractDataSource;
|
import com.alibaba.csp.sentinel.datasource.AbstractDataSource;
|
||||||
import com.alibaba.csp.sentinel.datasource.Converter;
|
import com.alibaba.csp.sentinel.datasource.Converter;
|
||||||
import com.alibaba.csp.sentinel.log.RecordLog;
|
import com.alibaba.csp.sentinel.log.RecordLog;
|
||||||
|
import com.alibaba.csp.sentinel.util.AssertUtil;
|
||||||
import com.alibaba.csp.sentinel.util.StringUtil;
|
import com.alibaba.csp.sentinel.util.StringUtil;
|
||||||
import com.alibaba.nacos.api.NacosFactory;
|
import com.alibaba.nacos.api.NacosFactory;
|
||||||
|
import com.alibaba.nacos.api.PropertyKeyConst;
|
||||||
import com.alibaba.nacos.api.config.ConfigService;
|
import com.alibaba.nacos.api.config.ConfigService;
|
||||||
import com.alibaba.nacos.api.config.listener.Listener;
|
import com.alibaba.nacos.api.config.listener.Listener;
|
||||||
|
|
||||||
|
|
@ -50,6 +53,7 @@ public class NacosDataSource<T> extends AbstractDataSource<String, T> {
|
||||||
private final Listener configListener;
|
private final Listener configListener;
|
||||||
private final String groupId;
|
private final String groupId;
|
||||||
private final String dataId;
|
private final String dataId;
|
||||||
|
private final Properties properties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note: The Nacos config might be null if its initialization failed.
|
* Note: The Nacos config might be null if its initialization failed.
|
||||||
|
|
@ -66,13 +70,27 @@ public class NacosDataSource<T> extends AbstractDataSource<String, T> {
|
||||||
*/
|
*/
|
||||||
public NacosDataSource(final String serverAddr, final String groupId, final String dataId,
|
public NacosDataSource(final String serverAddr, final String groupId, final String dataId,
|
||||||
Converter<String, T> parser) {
|
Converter<String, T> parser) {
|
||||||
super(parser);
|
this(NacosDataSource.buildProperties(serverAddr), groupId, dataId, parser);
|
||||||
if (StringUtil.isBlank(serverAddr) || StringUtil.isBlank(groupId) || StringUtil.isBlank(dataId)) {
|
|
||||||
throw new IllegalArgumentException(String.format("Bad argument: serverAddr=[%s], groupId=[%s], dataId=[%s]",
|
|
||||||
serverAddr, groupId, dataId));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param properties properties for construct {@link ConfigService} using {@link NacosFactory#createConfigService(Properties)}
|
||||||
|
* @param groupId group ID, cannot be empty
|
||||||
|
* @param dataId data ID, cannot be empty
|
||||||
|
* @param parser customized data parser, cannot be empty
|
||||||
|
*/
|
||||||
|
public NacosDataSource(final Properties properties, final String groupId, final String dataId,
|
||||||
|
Converter<String, T> parser) {
|
||||||
|
super(parser);
|
||||||
|
if (StringUtil.isBlank(groupId) || StringUtil.isBlank(dataId)) {
|
||||||
|
throw new IllegalArgumentException(String.format("Bad argument: groupId=[%s], dataId=[%s]",
|
||||||
|
groupId, dataId));
|
||||||
|
}
|
||||||
|
AssertUtil.notNull(properties, "Nacos properties must not be null, you could put some keys from PropertyKeyConst");
|
||||||
this.groupId = groupId;
|
this.groupId = groupId;
|
||||||
this.dataId = dataId;
|
this.dataId = dataId;
|
||||||
|
this.properties = properties;
|
||||||
this.configListener = new Listener() {
|
this.configListener = new Listener() {
|
||||||
@Override
|
@Override
|
||||||
public Executor getExecutor() {
|
public Executor getExecutor() {
|
||||||
|
|
@ -81,14 +99,14 @@ public class NacosDataSource<T> extends AbstractDataSource<String, T> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void receiveConfigInfo(final String configInfo) {
|
public void receiveConfigInfo(final String configInfo) {
|
||||||
RecordLog.info(String.format("[NacosDataSource] New property value received for (%s, %s, %s): %s",
|
RecordLog.info(String.format("[NacosDataSource] New property value received for (properties: %s) (dataId: %s, groupId: %s): %s",
|
||||||
serverAddr, dataId, groupId, configInfo));
|
properties, dataId, groupId, configInfo));
|
||||||
T newValue = NacosDataSource.this.parser.convert(configInfo);
|
T newValue = NacosDataSource.this.parser.convert(configInfo);
|
||||||
// Update the new value to the property.
|
// Update the new value to the property.
|
||||||
getProperty().updateValue(newValue);
|
getProperty().updateValue(newValue);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
initNacosListener(serverAddr);
|
initNacosListener();
|
||||||
loadInitialConfig();
|
loadInitialConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,9 +122,9 @@ public class NacosDataSource<T> extends AbstractDataSource<String, T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initNacosListener(String serverAddr) {
|
private void initNacosListener() {
|
||||||
try {
|
try {
|
||||||
this.configService = NacosFactory.createConfigService(serverAddr);
|
this.configService = NacosFactory.createConfigService(this.properties);
|
||||||
// Add config listener.
|
// Add config listener.
|
||||||
configService.addListener(dataId, groupId, configListener);
|
configService.addListener(dataId, groupId, configListener);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
@ -130,4 +148,10 @@ public class NacosDataSource<T> extends AbstractDataSource<String, T> {
|
||||||
}
|
}
|
||||||
pool.shutdownNow();
|
pool.shutdownNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Properties buildProperties(String serverAddr) {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setProperty(PropertyKeyConst.SERVER_ADDR, serverAddr);
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue