1.SOFA RPC源码解析
1.1 RPC配置
1.1.1 源码解析
在使用SOFA RPC的过程中,RPC相关的配置通过RpcConfigs实现。
RpcConfigs存在两个属性:
1. /**
2. * 全部配置
3. */
4. private final staticConcurrentHashMap<String, Object> CFG = new ConcurrentHashMap<String,Object>();
5. /**
6. * 配置变化监听器
7. */
8. private final staticConcurrentHashMap<String, List<RpcConfigListener>> CFG_LISTENER =new ConcurrentHashMap<String, List<RpcConfigListener>>();
其中:
- CFG用于缓存所有的配置;
- CFG_LISTENER缓存所有的配置监听器,当配置发生变化时,做相应的处理。
RpcConfigs在第一次使用时,通过静态代码块进行初始化,加载所有RPC相关的配置。
1. static {
2. init(); // 加载配置文件
3. }
RpcConfigs初始化:
1. private static void init() {
2. try {
3. // loadDefault
4. String json =FileUtils.file2String(RpcConfigs.class, "rpc-config-default.json","UTF-8");
5. Map map = JSON.parseObject(json,Map.class);
6. CFG.putAll(map);
7.
8. // loadCustom
9. loadCustom("sofa-rpc/rpc-config.json");
10. loadCustom("META-INF/sofa-rpc/rpc-config.json");
11.
12. // load system properties
13. CFG.putAll(newHashMap(System.getProperties())); // 注意部分属性可能被覆盖为字符串
14. } catch (Exception e) {
15. throw newSofaRpcRuntimeException("Catch Exception when load RpcConfigs", e);
16. }
17. }
第一步,加载RpcConfigs类所在目录下rpc-config-default.json文件,该文件为RPC缺省配置,具体内容参考如下: