本文收录于专栏 Nacos
推荐阅读:Nacos 架构 & 原理
文章目录
前言
本篇开始学习Nacos中服务订阅相关的源码
一、RequestHandlerRegistry
再前边看客户端注册到Nacos时,我们讲过一部分grpc的逻辑。GrpcRequestAcceptor会接收grpc请求,统一处理,源码如下:
@Autowired
RequestHandlerRegistry requestHandlerRegistry;
...
RequestHandler requestHandler = requestHandlerRegistry.getByRequestType(type);
...
Response response = requestHandler.handleRequest(request, requestMeta);
可以看到RequestHandlerRegistry根据不同的请求类型获取了相应的RequestHandler去处理请求,那么我们看下这个类的源码是如何组装请求类型和请求处理器RequestHandler的对应关系的。
@Service
public class RequestHandlerRegistry implements ApplicationListener<ContextRefreshedEvent> {
Map<String, RequestHandler> registryHandlers = new HashMap<>();
...
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
Map<String, RequestHandler> beansOfType = event.getApplicationContext().getBeansOfType(RequestHandler.class);
...
//将处理器保存到本地缓存
registryHandlers.putIfAbsent(tClass.getSimpleName(), requestHandler);
}
}
}
可以看到,RequestHandlerRegistry实现了ApplicationListener,监听了spring的ContextRefreshedEvent事件,在处理事件时将所有RequestHandler的实现保存到本地缓存registryHandlers中。
二、SubscribeServiceRequestHandler
@Override
@Secured(action = ActionTypes.READ)

本文围绕Nacos服务订阅相关源码展开。介绍了RequestHandlerRegistry组装请求类型与处理器对应关系;SubscribeServiceRequestHandler处理客户端订阅;EphemeralClientOperationServiceImpl处理订阅逻辑并发布事件;ClientServiceIndexesManager存储客户端订阅信息。指出客户端订阅代码结构设计更简单。
最低0.47元/天 解锁文章
2504





