全部产品

基础模型

更新时间:2020-02-18 09:25:13

消息

内部全部使用 SofaRequestSofaResponse 进行传递。

如果需要转换为其它协议,那么在真正调用和收到请求的时候,转换为实际要传输的对象。

可以对 SofaRequestSofaResponse 进行写入操作的模块如下:

  • Invoker
  • Filter
  • ServerHandler
  • Serialization

对消息体是只读的模块如下:

  • Cluster
  • Router
  • LoadBalance

日志

日志的初始化也是基于扩展机制。虽然是扩展,但是由于日志的加载应该是最早的,所以在 rpc-config.json 里有一个单独的 Key。

  1. {
  2. // 日志实现,日志早于配置加载,所以不能适应Extension机制
  3. "logger.impl": "com.alipay.sofa.rpc.log.MiddlewareLoggerImpl"
  4. }

配置项

使用者的 RPC 配置

用户的配置,例如端口配置(虽然已经开放对象中设置端口的字段,但是 SOFA 默认是从配置文件里取的),线程池大小配置等。

  • 通过 SofaConfigs 加载配置,调用 ExternalConfigLoader 读取外部属性。
  • 通过 SofaConfigs 提供的 API 进行获取。
  • 所有内部配置的Key都在 SofaOptions 类。
  • 优先级: System.property > sofa-config.properties(每个应用一个)> rpc-config.properties

RPC 框架配置

框架自身的配置,例如默认序列化,默认超时等。

  • 通过 RpcConfigs 加载配置文件。
  • 通过 RpcConfigs 其提供的API进行获取和监听数据变化
  • 所有内部配置的Key都在 RpcOptions
  • 优先级: System.property > custom rpc-config.json(可能存在多个自定义,会排序)> rpc-config-default.json

常量

  • 全局的基本常量在 RpcConstants 中,例如:
    • 调用方式:sync、oneway
    • 协议 bolt/grpc、序列化 hessian/java/protobuf
    • 上下文的 key
  • 如果扩展实现自身的常量,请自行维护。
    • 例如 BOLT 协议的常量。
      • SERIALIZE_CODE_HESSIAN = 1
      • PROTOCOL_TR = 13
  • 例如 DSR 配置中心相关的常量。
    • _WEIGHT、_CONNECTTIMEOUT 这种配置中心特有的 key。

地址

  • 地址信息放到 ProviderInfo 类中
  • ProviderInfo 的值主要分为三部分:
    • 字段:一般是一些必须项目,例如 IP、端口、状态等
    • 静态字段:例如应用名
    • 动态字段:例如预热权重等
  • 字段枚举维护在 ProviderInfoAttrs 类中