超时控制

使用 Bolt 协议进行通信的时候,SOFARPC 的超时时间默认为 3 秒,用户可以在引用服务的时候去设置超时时间,又分别可以在服务以及方法的维度设置超时时间,SOFARPC 的超时时间的设置的单位都为毫秒。

服务维度

如果需要在发布服务的时候在服务维度设置超时时间,设置对应的 timeout 参数到对应的值即可。

XML 方式

如果使用 XML 的方式引用服务,设置 <sofa:binding.bolt> 标签下的 <sofa:global-attrs> 标签的 timeout 属性的值即可:

  1. <sofa:reference interface="com.example.demo.SampleService" id="sampleService">
  2. <sofa:binding.bolt>
  3. <sofa:global-attrs timeout="2000"/>
  4. </sofa:binding.bolt>
  5. </sofa:reference>

Annotation 方式

如果使用 Annotation 引用服务,设置 @SofaReferenceBindingtimeout 属性的值即可:

  1. @SofaReference(binding = @SofaReferenceBinding(bindingType = "bolt", timeout = 2000))
  2. private SampleService sampleService;

Spring 环境 API 方式

如果在 Spring 或者 Spring Boot 的环境下引用服务,设置 BoltBindingParamtimeout 属性的值即可:

  1. BoltBindingParam boltBindingParam = new BoltBindingParam();
  2. boltBindingParam.setTimeout(2000)

非 Spring 环境下 API 方式

如果在非 Spring 环境下直接使用 SOFARPC 的裸 API 引用服务,设置 ConsumerConfigtimeout 属性即可:

  1. ConsumerConfig<SampleService> consumerConfig = new ConsumerConfig<SampleService>()
  2. .setInterfaceId(SampleService.class.getName())
  3. .setRegistry(registryConfig)
  4. .setProtocol("bolt")
  5. .setTimeout(2000);

方法维度

如果想要单独调整一个服务中某一个方法的超时时间,可以通过在方法维度上设置超时时间来实现。

对于某一个方法来说,优先方法维度的超时时间,如果没有设置,则使用服务维度的超时时间。

XML 方式

如果使用 XML 的方式引用一个服务,设置对应的 <sofa:method> 标签的 timeout 属性即可:

  1. <sofa:reference interface="com.example.demo.SampleService" id="sampleService">
  2. <sofa:binding.bolt>
  3. <sofa:method name="hello" timeout="2000"/>
  4. </sofa:binding.bolt>
  5. </sofa:reference>

Annotation 方式

目前暂未提供通过 Annotation 的方式来设置方法级别的超时时间。

Spring 环境 API 方式

如果在 Spring 或者 Spring Boot 的环境下引用服务,设置 RpcBindingMethodInfotimeout 属性的值即可:

  1. BoltBindingParam boltBindingParam = new BoltBindingParam();
  2. RpcBindingMethodInfo rpcBindingMethodInfo = new RpcBindingMethodInfo();
  3. rpcBindingMethodInfo.setName("hello");
  4. rpcBindingMethodInfo.setTimeout(2000);
  5. List<RpcBindingMethodInfo> rpcBindingMethodInfos = new ArrayList<>();
  6. rpcBindingMethodInfos.add(rpcBindingMethodInfo);
  7. boltBindingParam.setMethodInfos(rpcBindingMethodInfos);

非 Spring 环境 API 方式

如果在非 Spring 环境下使用 SOFARPC 的裸 API 引用服务,设置 MethodConfigtimeout 属性即可:

  1. MethodConfig methodConfig = new MethodConfig();
  2. methodConfig.setName("hello");
  3. methodConfig.setTimeout(2000);
  4. List<MethodConfig> methodConfigs = new ArrayList<MethodConfig>();
  5. methodConfigs.add(methodConfig);
  6. ConsumerConfig<SampleService> consumerConfig = new ConsumerConfig<SampleService>()
  7. .setInterfaceId(SampleService.class.getName())
  8. .setRegistry(registryConfig)
  9. .setProtocol("bolt")
  10. .setMethods(methodConfigs);