日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

配置方式

重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細(xì)閱讀。

SOFARPC 的服務(wù)發(fā)布和引用方式包括使用注解方式、使用 XML 配置方式和使用編程 API 方式。

使用注解方式

SOFABoot 環(huán)境支持使用注解方式,包括以下兩種:

  • 單協(xié)議注解:@SofaService@SofaReference.

  • 多協(xié)議注解:增加注解 @SofaServiceBinding@SofaReferenceBinding

服務(wù)發(fā)布

如果要發(fā)布一個 RPC 服務(wù),只需要在 Bean 上面打上 @SofaService 注解,指定接口和協(xié)議類型即可。

@SofaService(interfaceType =AnnotationService.class, bindings ={@SofaServiceBinding(bindingType ="bolt")})
@Component
public class AnnotationServiceImpl implements AnnotationService{
     @Override
     public String sayAnnotation(String helloAnno){
          return helloAnno;
     }
}

服務(wù)引用

對于需要引用遠(yuǎn)程服務(wù)的 Bean,只需要在屬性或者方法上打上 Reference 的注解即可,支持 Bolt、Dubbo、REST 協(xié)議。

@Component
public class AnnotationClientImpl{

     @SofaReference(interfaceType =AnnotationService.class, binding =@SofaReferenceBinding(bindingType ="bolt"))
     private AnnotationService annotationService;

      public String sayClientAnnotation(String clientAnno){

             String result = annotationService.sayAnnotation(clientAnno);

             return result;
       }
}

使用 XML 配置

XML 配置中主要標(biāo)簽含義如下:

  • sofa:service:表示發(fā)布服務(wù)。

  • sofa:reference:表示引用服務(wù)。

  • sofa:binding:表示服務(wù)發(fā)布或引用的協(xié)議。

說明

XML 配置完整示例,請參見 示例工程

服務(wù)發(fā)布示例

  • 單協(xié)議發(fā)布

    <bean id="personServiceImpl" class="com.alipay.sofa.boot.examples.demo.rpc.bean.PersonServiceImpl"/>
    <sofa:service ref="personServiceImpl" interface="com.alipay.sofa.boot.examples.demo.rpc.bean.PersonService">
       <sofa:binding.bolt/>
    </sofa:service>
  • 多協(xié)議發(fā)布

    <sofa:service ref="personServiceImpl" interface="com.alipay.sofa.boot.examples.demo.rpc.bean.PersonService">
        <sofa:binding.bolt/>
        <sofa:binding.rest/>
        <sofa:binding.dubbo/>
    </sofa:service>

服務(wù)引用示例

  • Bolt 協(xié)議引用

    <sofa:reference id="personReferenceBolt" interface="com.alipay.sofa.boot.examples.demo.rpc.bean.PersonService">
         <sofa:binding.bolt/>
    </sofa:reference>
  • REST 協(xié)議引用

    <sofa:reference id="personReferenceRest" interface="com.alipay.sofa.boot.examples.demo.rpc.bean.PersonService">
        <sofa:binding.rest/>
    </sofa:reference>

使用編程 API

SOFA 提供一套機(jī)制去存放各種組件的編程 API,并提供一套統(tǒng)一的方法,讓您可以獲取到這些 API。組件編程 API 的存放與獲取均通過 SOFA 的 ClientFactory 類進(jìn)行,通過這個 ClientFactory 類,可以獲取到對應(yīng)組件的編程 API。

前提條件

使用 SOFA 組件編程相關(guān)的 API,請確保使用的模塊里面已經(jīng)添加了如下的依賴:

<dependency>
     <groupId>com.alipay.sofa</groupId>
     <artifactId>rpc-enterprise-sofa-boot-starter</artifactId>
</dependency>

配置方式

SOFA 提供兩種方式獲取 ClientFactory

  • 實(shí)現(xiàn) ClientFactoryAware 接口

    代碼示例如下:

    public class ClientFactoryBean implements ClientFactoryAware{
          private ClientFactory clientFactory;
    
          @Override
          public void setClientFactory(ClientFactory clientFactory){
              this.clientFactory = clientFactory;
          }
    
         public ClientFactory getClientFactory(){
              return clientFactory;
         }
    }

    然后,將上面的 ClientFactoryBean 配置成一個 Spring Bean。

    <bean id="clientFactoryBean" class="com.alipay.test.ClientFactoryBean"/>

    完成后,ClientFactoryBean 就可以獲取到 clientFactory 對象來使用了。

  • 使用 @SofaClientFactory 注解

    代碼示例如下:

    public class ClientAnnotatedBean{
          @SofaClientFactory
          private ClientFactory clientFactory;
    
          public ClientFactory getClientFactory(){
               return clientFactory;
          }
    }

    您需要在 ClientFactory 字段上加上 @SofaClientFactory 的注解,然后將 ClientAnnotatedBean 配置成一個 Spring Bean 。

    <bean id="clientAnnotatedBean" class="com.alipay.test.ClientAnnotatedBean"/>

    完成后,SOFA 框架就會自動將 ClientFactory 的實(shí)例注入到被 @SofaClientFactory 注解的字段上。

    以上操作只是獲取到 ClientFactory 這個對象,如果要獲取特定的客戶端(如 ServiceFactory),您還需調(diào)用 ClientFactorygetClient 方法。SOFA 對 @SofaClientFactory 的注解進(jìn)行了增強(qiáng),可以直接通過 @SofaClientFactory 來獲取具體的 Client,代碼示例如下:

    public class ClientAnnotatedBean{
        @SofaClientFactory
        private ServiceClient serviceClient;
    
        public ServiceClient getServiceClient(){
            return serviceClient;
        }
    }

    當(dāng) @SofaClientFactory 直接使用在具體的 Client 對象上時,此注解可以直接將對應(yīng)的 Client 對象注入到被注解的字段上。在上述例子中,@SofaClientFactory 是直接注解在類型為 ServiceClient 的字段上,SOFA 框架會直接將 ServiceClient 對象注入到這個字段上。所有在 ClientFactory 中存在的對象,都可以通過此種方式來獲得。

編程 API 示例

服務(wù)的發(fā)布與訂閱不僅可以通過在 XML 中配置 Spring Bean 的方式在應(yīng)用啟動期靜態(tài)加載,也可以采用編程 API 的方式在應(yīng)用運(yùn)行期動態(tài)執(zhí)行,用法如下:

Bolt 服務(wù)發(fā)布

ServiceClient serviceClient = clientFactory.getClient(ServiceClient.class);

ServiceParam serviceParam = new ServiceParam();
serviceParam.setInstance(sampleService);
serviceParam.setInterfaceType(SampleService.class);
serviceParam.setUniqueId(uniqueId);

TrBindingParam trBinding = new TrBindingParam();
// 對應(yīng) global-attrs 標(biāo)簽。
trBinding.setClientTimeout(5000);

serviceParam.addBindingParam(trBinding);

serviceClient.service(serviceParam);

Bolt 服務(wù)引用

ReferenceClient referenceClient = clientFactory.getClient(ReferenceClient.class);
ReferenceParam<SampleService> referenceParam = new ReferenceParam<SampleService>();
referenceParam.setInterfaceType(SampleService.class);
referenceParam.setUniqueId(uniqueId);

TrBindingParam trBinding = new TrBindingParam();
// 對應(yīng) global-attrs 標(biāo)簽。
trBinding.setClientTimeout(8000);

// 對應(yīng) method 標(biāo)簽。
TrBindingMethodInfo trMethodInfo = new TrBindingMethodInfo();
trMethodInfo.setName("helloMethod");
trMethodInfo.setType("callback");
// 對象必須實(shí)現(xiàn) com.alipay.sofa.rpc.api.callback.SofaResponseCallback 接口。
trMethodInfo.setCallbackHandler(callbackHandler);
trBinding.addMethodInfo(trMethodInfo);

referenceParam.setBindingParam(trBinding);

SampleService proxy = referenceClient.reference(referenceParam);
警告

通過動態(tài)客戶端創(chuàng)建 SOFA Reference 返回的對象是一個非常重要的對象,在使用的時候不要頻繁創(chuàng)建,自行做好緩存,否則可能存在內(nèi)存溢出的風(fēng)險。 因為編程 API 的類不能輕易變化,類名為了兼容以前的用法,保持 TR 寫法,但實(shí)際其中走的是 Bolt 協(xié)議。