分类 spring cloud alibaba源码 中的文章

nacos客户端是如何进行服务发现的?

本来自己写了一遍,但从网上找到的一个源码分析图。觉得比自己总结的好且更为细致,就直接放过来了。一图胜千言。 https://xie.infoq.cn/article/d342a914b8754dd52f5709b43 服务心跳、服务剔除 这些都与eureka类似。定时访问对应的接口即可 与eureka不太一样的是,服务同步如果是ephemeral则异步更新,达到最终一致性 AP。如果是持久化的注册,则使用raft协议同步 CP。 nacos1.x版本使用http进行通信、2.x版本做了重构改为使用grpc进行内部节点以及对外通信,目前为beta版。……

阅读全文

nacos注册中心初始化

注册中心启动类就一个springboot应用,看不出什么东西 @EnableScheduling @SpringBootApplication(scanBasePackages = {"com.alibaba.nacos.naming", "com.alibaba.nacos.core"}) public class NamingApp { public static void main(String[] args) { SpringApplication.run(NamingApp.class, args); } } 通过官方文档已经一些分析,得知底层是用了raft协议来做集群同步 //PersistentConsistencyServiceDelegateImpl private BasePersistentServiceProcessor createNewPersistentServiceProcessor(ProtocolManager protocolManager, ClusterVersionJudgement versionJudgement) throws Exception { //根据相关配置,判断到底是standlone还是raft模式 final BasePersistentServiceProcessor processor = EnvUtil.getStandaloneMode() ? new StandalonePersistentServiceProcessor(versionJudgement) : new PersistentServiceProcessor(protocolManager, versionJudgement); //调用基类的方法 processor.afterConstruct(); return processor; } 具体的代码逻辑 //PersistentServiceProcessor @Override public void afterConstruct() { super.afterConstruct(); this.protocol.addRequestProcessors(Collections.singletonList(this)); //监听元数据的状态 this.protocol.protocolMetaData() .subscribe(Constants.NAMING_PERSISTENT_SERVICE_GROUP, MetadataKey.LEADER_META_DATA, (o, arg) -> hasLeader = StringUtils.……

阅读全文