共计 3181 个字符,预计需要花费 8 分钟才能阅读完成。
序
本文主要研究一下 nacos 的 DelegateConsistencyServiceImpl
ConsistencyService
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/consistency/ConsistencyService.java
public interface ConsistencyService {
/**
* Put a data related to a key to Nacos cluster
*
* @param key key of data, this key should be globally unique
* @param value value of data
* @throws NacosException
* @see
*/
void put(String key, Record value) throws NacosException;
/**
* Remove a data from Nacos cluster
*
* @param key key of data
* @throws NacosException
*/
void remove(String key) throws NacosException;
/**
* Get a data from Nacos cluster
*
* @param key key of data
* @return data related to the key
* @throws NacosException
*/
Datum get(String key) throws NacosException;
/**
* Listen for changes of a data
*
* @param key key of data
* @param listener callback of data change
* @throws NacosException
*/
void listen(String key, RecordListener listener) throws NacosException;
/**
* Cancel listening of a data
*
* @param key key of data
* @param listener callback of data change
* @throws NacosException
*/
void unlisten(String key, RecordListener listener) throws NacosException;
/**
* Tell the status of this consistency service
*
* @return true if available
*/
boolean isAvailable();}
- ConsistencyService 定义了 put、remove、get、listen、unlisten、isAvailable 方法
DelegateConsistencyServiceImpl
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/consistency/DelegateConsistencyServiceImpl.java
@Service("consistencyDelegate")
public class DelegateConsistencyServiceImpl implements ConsistencyService {
@Autowired
private PersistentConsistencyService persistentConsistencyService;
@Autowired
private EphemeralConsistencyService ephemeralConsistencyService;
@Override
public void put(String key, Record value) throws NacosException {mapConsistencyService(key).put(key, value);
}
@Override
public void remove(String key) throws NacosException {mapConsistencyService(key).remove(key);
}
@Override
public Datum get(String key) throws NacosException {return mapConsistencyService(key).get(key);
}
@Override
public void listen(String key, RecordListener listener) throws NacosException {
// this special key is listened by both:
if (KeyBuilder.SERVICE_META_KEY_PREFIX.equals(key)) {persistentConsistencyService.listen(key, listener);
ephemeralConsistencyService.listen(key, listener);
return;
}
mapConsistencyService(key).listen(key, listener);
}
@Override
public void unlisten(String key, RecordListener listener) throws NacosException {mapConsistencyService(key).unlisten(key, listener);
}
@Override
public boolean isAvailable() {return ephemeralConsistencyService.isAvailable() && persistentConsistencyService.isAvailable();}
private ConsistencyService mapConsistencyService(String key) {return KeyBuilder.matchEphemeralKey(key) ? ephemeralConsistencyService : persistentConsistencyService;
}
}
- DelegateConsistencyServiceImpl 实现了 ConsistencyService 接口;其 put、remove、get、listen、unlisten 方法内部都使用了 mapConsistencyService 来判断是使用 ephemeralConsistencyService 还 persistentConsistencyService;其 isAvailable 方法要求 ephemeralConsistencyService 及 persistentConsistencyService 都是 available
小结
ConsistencyService 定义了 put、remove、get、listen、unlisten、isAvailable 方法;DelegateConsistencyServiceImpl 实现了 ConsistencyService 接口;其 put、remove、get、listen、unlisten 方法内部都使用了 mapConsistencyService 来判断是使用 ephemeralConsistencyService 还 persistentConsistencyService;其 isAvailable 方法要求 ephemeralConsistencyService 及 persistentConsistencyService 都是 available
doc
- DelegateConsistencyServiceImpl