配置的发布与订阅
我们先来看看如何使用nacos提供的api来实现配置的发布与订阅
发布配置:
public class ConfigPub {
public static void main(String[] args) throws NacosException {
final String dataId="test";
final String group="DEFAULT_GROUP";
ConfigService configService= NacosFactory.createConfigService("localhost:8848");
configService.publishConfig(dataId,group,"test config body");
}
}
订阅配置:
public static void main(String[] args) throws NacosException, InterruptedException {
final String dataId="test";
final String group="DEFAULT_GROUP";
ConfigService configService= NacosFactory.createConfigService("localhost:8848");
configService.addListener(dataId, group, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("receiveConfigInfo:"+configInfo);
}
});
Thread.sleep(Integer.MAX_VALUE);
}
}
根据上面的demo可以看到通过dataId和group可以定位一个配置文件。
深入了解配置发布
1-发布的配置信息会通过http请求调用具体的服务
agent.httpPost(url, headers, params, encode, POST_TIMEOUT);
服务类为 ConfigController:处理配置相关的http请求
persistService
.insertOrUpdateTag(configInfo, tag, srcIp, srcUser, time, false);
EventDispatcher.fireEvent(
new ConfigDataChangeEvent(false, dataId, group, tenant, tag,
time.getTime()));
可以看到发布的配置首先会进行持久化,然后会触发变更通知。
持久化这里就不做分析,我们来看看fireEvent这个方法:
EventDispatcher.fireEvent:
static public void fireEvent(Event event) {
if (null == event) {
throw new IllegalArgumentException("event is null");
}
for (AbstractEventListener listener : getEntry(event.getClass()).listeners) {
t