本文介绍在使用 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 = 1
PROTOCOL_TR = 13
例如 DSR 配置中心相关的常量
_WEIGHT、_CONNECTTIMEOUT
,这种配置中心特有的 key。
地址
地址信息放到
ProviderInfo
类中。ProviderInfo
的值主要分为三部分:字段:一般是一些必须项目,例如 IP、端口、状态等。
静态字段:例如应用名。
动态字段:例如预热权重等。
字段枚举维护在
ProviderInfoAttrs
类中。