SOFARPC 支持进行框架层面的重试策略,前提是集群模式为 FailOver(SOFARPC 默认即为 FailOver 模式)。重试只有在发生服务端的框架层面异常或者是超时异常才会发起。如果是业务抛出异常,是不会重试的。默认情况下 SOFARPC 不进行任何重试。

请注意:超时异常虽然可以重试,但是需要服务端保证业务的幂等性,否则可能会有风险

XML 方式

如果使用 XML 方式订阅服务,可以设置 sofa:global-attrsretries 参数来设置重试次数:

  1. <sofa:reference jvm-first="false" id="retriesServiceReferenceBolt" interface="com.alipay.sofa.rpc.samples.retries.RetriesService">
  2. <sofa:binding.bolt>
  3. <sofa:global-attrs retries="2"/>
  4. </sofa:binding.bolt>
  5. </sofa:reference>

Annotation 方式

如果是使用 Annotation 的方式,可以通过设置 @SofaReferenceBinding 注解的 retries 属性来设置:

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

Spring 环境下 API 方式

如果是在 Spring 环境下用 API 的方式,可以调用 BoltBindingParamsetRetries 方法来设置:

  1. BoltBindingParam boltBindingParam = new BoltBindingParam();
  2. boltBindingParam.setRetries(2);

非 Spring 环境下 API 方式

如果是在非 Spring 环境下直接使用 SOFARPC 的裸 API 的方式,可以通过调用 ConsumerConfigsetRetries 方法来设置:

  1. ConsumerConfig<RetriesService> consumerConfig = new ConsumerConfig<RetriesService>();
  2. consumerConfig.setRetries(2);