SOFA RPC源码解析之RPC配置

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缺省配置,具体内容参考如下:

1.  /*
2.  本文件为SOFA RPC客户端内置的默认配置文件。
3.  用户可以在自己的工程中自定义rpc-config.json进行默认配置覆盖。
4.  所有的属性均可配置。(通过-D或者setProperty
5.   
6.  PS:大家也看到了,本JSON文档是支持注释的,而标准JSON是不支持的,这属于宽松的的json格式
7.  */
8.  {
9.    /*-------------RPC框架内部使用配置项-------------*/
10.   //本配置文件加载顺序,越大越后加载
11.   "rpc.config.order": 0,
12.   //日志实现,日志早于配置加载,所以不能适应Extension机制
13.   "logger.impl":"com.alipay.sofa.rpc.log.SLF4JLoggerImpl",
14.   //扩展点加载的路径
15.   "extension.load.path": [
16.     "META-INF/services/sofa-rpc/",
17.     "META-INF/services/"
18.   ],
19.   //需要被加载的模块列表,多个用逗号隔开
20.   "module.load.list" : "*",
21.   /*-------------RPC框架内部使用配置项-------------*/
22.  
23.  
24.   /*-------------系统运行时相关配置开始-------------*/
25.   //0代表自动判断,也可以自定义注入,或者启动参数注入
26.   "system.cpu.cores": 0,
27.   //是否允许线程上下文携带自定义参数,默认true,关闭后,可能tracer等会失效,但是会提高性能
28.   "context.attachment.enable": true,
29.   //是否启动事件总线,关闭后,可能tracer等会失效,但是可以提高性能
30.   "event.bus.enable": true,
31.   //主动监听JVM关闭事件,默认true,如果有外部管理框架,可以由外部开启回收
32.   "jvm.shutdown.hook": true,
33.   //是否增加序列化安全黑名单,关闭后可提供性能
34.   "serialize.blacklist.enable":false,
35.   //是否支持多ClassLoader支持,如果是单ClassLoader环境,可以关闭提高性能
36.   "multiple.classloader.enable":false,
37.   //是否允许请求和响应透传数据,关闭后,会提高性能
38.   "invoke.baggage.enable": false,
39.   /*-------------系统运行时相关配置开始-------------*/
40.  
41.  
42.   /*-------------默认配置值开始-------------*/
43.   //默认Provider启动器
44.   "default.provider.bootstrap":"bolt",
45.   //默认Consumer启动器
46.   "default.consumer.bootstrap":"bolt",
47.   //默认uniqueId 做为
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任性之闲来无事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值