目录
- 1、Consumer方法级别
- 2、Consumer服务级别
- 3、Provider服务级别
- 4、全局设置级别
1、Consumer方法级别
Consumer方法级中设置的参数。目前3.4.2的sofaboot版本该参数只能通过XML方式进行配置,暂时不支持注解方式进行配置,具体配置如下所示,表示com.example.demoSampleService服务方法中的hello方法的超时时间设置为2000毫秒。
- XML方式
<sofa:reference interface="com.example.demo.SampleService"
id="sampleService">
<sofa:binding.bolt>
<sofa:method name="hello" timeout="2000"/>
</sofa:binding.bolt>
</sofa:reference>
2、Consumer服务级别
如果Consume方法级别没有设置,那么将尝试获取服务级别的参数,该参数可以通过XML方式进行设置,也可以通过注解方式进行设置。
- 注解方式
SofaReference(interfaceType = HelloSyncService.class,
binding = @SofaReferenceBinding(bindingType = "bolt",
timeout = 4000, parameters = {@SofaParameter(key =
"dynamicAlias", value = "drm")}))
- XML方式
<sofa:reference interface="com.example.demo.SampleService"
id="sampleService">
<sofa:binding.bolt>
<sofa:global-attrs timeout="2000"/>
</sofa:binding.bolt>
</sofa:reference>
3、Provider服务级别
如果消费方没有进行任何超时设置,那么将试图从Provider侧获取超时参数,Provider侧支持使用注解方式进行配置,也支持使用XML方式进行配置。
注解方式,如下所示,将该提供的服务的超时间设置为303毫秒
- 注解方式
@SofaService(interfaceType = HelloSyncService.class,
bindings = [ @SofaServiceBinding(bindingType = "bolt",timeout =303) })
XML方式,如下将服务超时时间设置为606毫秒
- XML方式
<sofa:service ref="sampleFacadeImpl"
interface="com.alipay.sofa.rpc.bean.SampleFacade">
<sofa:binding.bolt>
<sofa:global-attrs timeout="606" />
</sofa:binding.bolt>
</sofa:service>
4、全局设置级别
这是全局兜底的⼀个参数设置,如果程序跑到这⼀步,且没有设置过这个全局参数,那么全局的这个参
数默认为3000毫秒,如果这个全局参数设置不合理,那么可以在启动的时候添加⼀个“-
Dconsumer.invoke.timeout=3000”参数。
总结
- SOFARPC的服务超时时间可以被设置的参数⾮常多,也⾮常灵活,灵活地掌握超时时间设置是⾮常有必要的,如果不⼩⼼设置了⼀个不合理的超时时间,那么服务的稳定可靠性必定会受到影响。按照配置参数⽣效的优先级,分别为:Consumer⽅法级别超时参数配置、Consumer服务级别超时参数配置、Provider服务级别参数配置、消费⽅全局超时参数配置。
- 按照过往的经验,⼀般会设置⼀个全局的超时参数,如果⼀些服务的超时参数不满⾜于全局的超时参数,那么可以按消费⽅服务粒度或者⽅法粒度进⾏配置。⼀般不建议使⽤服务提供⽅的服务超时配置。
- 最后如果对动态配置有要求,那么可以使⽤动态配置来修改超时参数,以达到动态配置的效果。