聊聊nacos的DelegateConsistencyServiceImpl

5次阅读

共计 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
正文完
 0