本文介绍在 SOFABoot 环境下完整的 SOFARPC 服务发布与引用说明。
发布服务
<bean id="helloSyncServiceImpl" class="com.alipay.sofa.rpc.samples.invoke.HelloSyncServiceImpl"/>
<sofa:service ref="helloSyncServiceImpl" interface="com.alipay.sofa.rpc.samples.invoke.HelloSyncService" unique-id="">
<sofa:binding.bolt>
<sofa:global-attrs registry="" serialize-type="" filter="" timeout="3000" thread-pool-ref=" "
warm-up-time="60000"
warm-up-weight="10" weight="100"/>
</sofa:binding.bolt>
<sofa:binding.rest>
</sofa:binding.rest>
</sofa:service>属性说明:
属性  | 默认值  | 说明  | 
id  | Bean 名  | ID  | 
class  | -  | 类  | 
ref  | -  | 服务接口实现类  | 
interface  | -  | 服务接口(唯一标识元素)  | 
unique-id  | -  | 服务标签(唯一标识元素)  | 
filter  | -  | 过滤器配置别名  | 
registry  | DSR  | 服务端注册中心。多个注册中心需使用逗号分隔。 支持的注册中心请参见 注册中心路由。  | 
timeout  | 3000  | 服务端执行超时时间 单位:毫秒。  | 
serialize-type  | hessian2  | 序列化协议,取值为:hessian2、protobuf。  | 
thread-pool-ref  | -  | 自定义业务线程池,需要指向一个   | 
weight  | 100  | 服务静态权重。数值越大,权重越高。  | 
warm-up-weight  | 10  | 服务提供者的预热权重,当客户端刚建立连接时,在指定的预热时间内会使用此权重。  | 
warm-up-time  | 0  | 服务提供者的预热时间,当客户端刚建立连接时,在该时间内会使用预热权重。 单位:毫秒。  | 
引用服务
<sofa:reference jvm-first="false" id="helloSyncServiceReference"
interface="com.alipay.sofa.rpc.samples.invoke.HelloSyncService" unique-id="">
<sofa:binding.bolt>
<sofa:global-attrs type="sync" timeout="3000" callback-ref="" callback-class="" address-wait-time="1000"
connect.num="1" check="false" connect.timeout="1000" filter="" generic-interface=""
idle.timeout="1000"
idle.timeout.read="1000" lazy="false" loadBalancer="" registry="" retries="1"
serialize-type=""/>
<sofa:route target-url="xxx:12200"/>
<sofa:method name="hello" callback-class="" callback-ref="" timeout="3000" type="sync"/>
</sofa:binding.bolt>
</sofa:reference>属性说明:
属性  | 默认值  | 说明  | 
id  | 自动生成  | ID  | 
jvm-first  | true  | 是否优先使用本地 JVM 配置,取值:true、false。  | 
interface  | -  | 服务接口(唯一标识元素) 无论是普通调用还是返回调用,都必须设置实际的接口类。  | 
unique-id  | -  | 服务标签(唯一标识元素)  | 
type  | sync  | 调用方式。取值为:sync、oneway、callback、future。  | 
filter  | -  | 过滤器配置别名  | 
registry  | DSR  | 服务端注册中心。多个注册中心需使用逗号分隔。 支持的注册中心请参见 注册中心路由。  | 
method  | -  | 方法级配置,  | 
serialize-type  | hessian2  | 序列化协议,取值为:hessian2、protobuf。  | 
target-url  | -  | 使用直连调用时配置的直连地址。 配置   | 
generic-interface  | -  | 泛化接口  | 
connect.timeout  | 1000  | 消费方连接超时时间 单位:毫秒。  | 
connect.num  | -1  | 消费方连接数 -1 表示不设置(默认为每个目标地址建立一个连接)。  | 
idle.timeout  | -1  | 消费方最大空闲时间 -1 表示使用底层默认值(底层默认值为 0,表示永远不会读 idle)。该配置也是心跳的时间间隔,当请求 idle 时间超过配置时间后,发送心跳到服务方。  | 
idle.timeout.read  | -1  | 消费方最大读空闲时间 -1 表示使用底层默认值(底层默认值为 30)。如果   | 
loadBalancer  | random  | 负载均衡算法  | 
lazy  | false  | 是否延迟建立长连接,取值:true、false。  | 
address-wait-time  | 0  | reference 生成时,等待配置中心将地址推送到消费方的时间。 单位:毫秒。 最大值为 30000 毫秒,超过这个值时会被调整为 30000 毫秒。  | 
timeout  | 3000  | 调用超时时间  | 
retries  | 0  | 当出现非业务异常时,框架层面自动重试的次数。需要服务提供者自己保证方法的幂等性。  | 
callback-class  | -  | callback 回调类,详情请参见 Bolt 协议的调用方式。 callback 时才可用。  | 
callback-ref  | -  | callback 回调类,详情请参见 Bolt 协议的调用方式。 callback 时才可用。  | 
配置的优先级
SOFARPC 里面的某些配置,例如调用超时 timeout 属性可以在服务提供方设置,也可以在服务调用方设置。这些配置的优先级从高到低排列如下:
线程调用级别设置。
服务调用方。
方法级别设置。
Reference 级别设置。
服务提供方。
方法级别设置。
Service 级别设置。