全部产品

多协议调用及配置的优先级

更新时间:2020-08-17 10:01:42

本文主要内容如下:

其中,多注册中心注册,仅补充在此供用户参考,不再单列为一篇文档。

多协议调用

在 SOFARPC 中,同一个服务可以多协议发布,并按不同协议被客户端调用。主要调用方式有下述几种,示例如下:

  • Java API 方式:可以按照如下的代码构建多个 ServerConfig,不同的 ServerConfig 设置不同的协议,然后将这些 ServerConfig 设置给 ProviderConfig:

    1. List<ServerConfig> serverConfigs = new ArrayList<ServerConfig>();
    2. serverConfigs.add(serverConfigA);
    3. serverConfigs.add(serverConfigB);
    4. providerConfig.setServer(serverConfigs);
  • XML 方式:直接在 <sofa:service> 标签中增加多个 binding 即可:

    1. <sofa:service ref="sampleFacadeImpl" interface="com.alipay.sofa.rpc.bean.SampleFacade">
    2. <sofa:binding.bolt/>
    3. <sofa:binding.rest/>
    4. <sofa:binding.dubbo/>
    5. </sofa:service>
  • Annotation 方式:在 @SofaService 中增加多个 binding 即可:

    1. @SofaService(
    2. interfaceType = SampleService.class,
    3. bindings = {
    4. @SofaServiceBinding(bindingType = "rest"),
    5. @SofaServiceBinding(bindingType = "bolt")
    6. }
    7. )
    8. public class SampleServiceImpl implements SampleService {
    9. // ...
    10. }

配置的优先级

SOFARPC 里面的某些配置,例如调用超时 timeout 属性,可以在服务提供方设置,也可以在服务调用方设置。这些配置的优先级从高到低排列如下:

  • 线程调用级别设置
  • 服务调用方
    • 方法级别设置
    • Reference 级别设置
  • 服务提供方
    • 方法级别设置
    • Service 级别设置

多注册中心注册

同一个服务可以注册多个注册中心,主要方式示例如下:

  • API 方式:步骤如下。

    1. 构建多个 RegistryConfig,并设置给 ProviderConfig,示例如下:

      1. List<RegistryConfig> registryConfigs = new ArrayList<RegistryConfig>();
      2. registryConfigs.add(registryA);
      3. registryConfigs.add(registryB);
      4. providerConfig.setRegistry(registryConfigs);
    2. 调用 MethodConfig 对象相应的 set 方法,设置对应的参数,示例如下:

      1. MethodConfig methodConfigA = new MethodConfig();
      2. MethodConfig methodConfigB = new MethodConfig();
      3. List<MethodConfig> methodConfigs = new ArrayList<MethodConfig>();
      4. methodConfigs.add(methodConfigA);
      5. methodConfigs.add(methodConfigB);
      6. providerConfig.setMethods(methodConfigs); //服务端设置
      7. consumerConfig.setMethods(methodConfigs); //客户端设置
  • XML 方式:在对应的 binding 里面,使用 <sofa:method> 标签设置对应的参数,示例如下:

    1. <sofa:reference id="personReferenceBolt" interface="com.alipay.sofa.boot.examples.demo.rpc.bean.PersonService">
    2. <sofa:binding.bolt>
    3. <sofa:global-attrs timeout="3000" address-wait-time="2000"/> <!-- 调用超时;地址等待时间。 -->
    4. <sofa:route target-url="127.0.0.1:22000"/> <!-- 直连地址 -->
    5. <sofa:method name="sayName" timeout="3000"/> <!-- 方法级别配置 -->
    6. </sofa:binding.bolt>
    7. </sofa:reference>
    8. <sofa:service ref="sampleFacadeImpl" interface="com.alipay.sofa.rpc.bean.SampleFacade">
    9. <sofa:binding.bolt>
    10. <sofa:global-attrs timeout="3000"/>
    11. <sofa:method name="sayName" timeout="2000"/>
    12. </sofa:binding.bolt>
    13. </sofa:service>
  • Annotation 方式:暂不支持设置方法级别的参数,将在后续版本中支持。