目录

  • 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”参数。


总结

  1. SOFARPC的服务超时时间可以被设置的参数⾮常多,也⾮常灵活,灵活地掌握超时时间设置是⾮常有必要的,如果不⼩⼼设置了⼀个不合理的超时时间,那么服务的稳定可靠性必定会受到影响。按照配置参数⽣效的优先级,分别为:Consumer⽅法级别超时参数配置、Consumer服务级别超时参数配置、Provider服务级别参数配置、消费⽅全局超时参数配置。
  2. 按照过往的经验,⼀般会设置⼀个全局的超时参数,如果⼀些服务的超时参数不满⾜于全局的超时参数,那么可以按消费⽅服务粒度或者⽅法粒度进⾏配置。⼀般不建议使⽤服务提供⽅的服务超时配置。
  3. 最后如果对动态配置有要求,那么可以使⽤动态配置来修改超时参数,以达到动态配置的效果。