全部产品

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

更新时间:2021-02-09 14:46

本文介绍多协议调用及配置的优先级,主要内容如下。

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

多协议调用

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

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

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

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

    @SofaService(
          interfaceType =SampleService.class,
          bindings ={
    @SofaServiceBinding(bindingType ="rest"),
    @SofaServiceBinding(bindingType ="bolt")
    }
    )
    public class SampleServiceImpl implements SampleService{
    // ...
    }

配置的优先级

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

  • 线程调用级别设置

  • 服务调用方

    • 方法级别设置

    • Reference 级别设置

  • 服务提供方

    • 方法级别设置

    • Service 级别设置

多注册中心注册

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

  • API 方式:步骤如下。

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

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

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

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