SOFARPC 的服务发布和引用的基本配置已经在「编程界面」章节中说明,这里主要介绍服务发布和引用的一些特性。

同一服务发布多种协议

在 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. }

同一服务注册多个注册中心

如果使用 API 的方式,构建多个 RegistryConfig 设置给 ProviderConfig 即可:

  1. List<RegistryConfig> registryConfigs = new ArrayList<RegistryConfig>();
  2. registryConfigs.add(registryA);
  3. registryConfigs.add(registryB);
  4. providerConfig.setRegistry(registryConfigs);

如果是使用 XML 的方式

如果使用 Annotation 的方式

方法级参数设置

在 Java API 方式中,调用 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 的方式暂不支持设置方法级别的参数,将在后续版本中支持。

配置覆盖

SOFARPC 里面的某些配置在服务提供方可以设置,在服务调用方也可以设置,比如调用的超时的 timeout 属性,这些配置的优先级为:

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