本文介绍在使用 SOFARPC 进行开发时会涉及的关键类。
消息
内部消息全部使用 SofaRequest 和 SofaResponse 进行传递。如果您需要转换为其它协议,请在真正调用和收到请求的时候,转换为实际要传输的对象。
可以对 SofaRequest 和 SofaResponse 进行写入操作的模块如下:
Invoker
Filter
ServerHandler
Serialization
对消息体是只读的模块如下:
Cluster
Router
LoadBalance
日志
日志的初始化也是基于扩展机制,但由于日志先加载,所以在 rpc-config.json 里有一个单独的 Key:
{
//日志实现。日志早于配置加载,所以不能适应Extension机制。
"logger.impl":"com.alipay.sofa.rpc.log.MiddlewareLoggerImpl"
}配置项
使用者的 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 = 1PROTOCOL_TR = 13
例如 DSR 配置中心相关的常量
_WEIGHT、_CONNECTTIMEOUT,这种配置中心特有的 key。
地址
地址信息放到
ProviderInfo类中。ProviderInfo的值主要分为三部分:字段:一般是一些必须项目,例如 IP、端口、状态等。
静态字段:例如应用名。
动态字段:例如预热权重等。
字段枚举维护在
ProviderInfoAttrs类中。