(三)dubbo api方式

具體參考我的gitee:springboot-dubbo-api

ProviderConfig

package com.dubbo.api.config;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.dubbo.api.service.DubboApiService;
import com.dubbo.api.service.DubboApiServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Classname ProviderConfig
 * @Description TODO
 * @Date 2020/4/23 9:11
 * @Created by Administrator
 */
@Configuration
public class ProviderConfig {

   @Bean
   public void getProviderConfig(){
       // 服務實現
       DubboApiService dubboApiService = new DubboApiServiceImpl();
       // 當前應用配置
       ApplicationConfig application = new ApplicationConfig();
       application.setName("DubboProvider");
       // qos-server can not bind localhost:22222  java.net.BindException: Address already in use: bind
       application.setQosEnable(true);
       application.setQosPort(33333);
       application.setQosAcceptForeignIp(false);
       // 連接註冊中心配置
       RegistryConfig registry = new RegistryConfig();
       registry.setAddress("zookeeper://127.0.0.1:2181");
       //registry.setUsername("aaa");
       //registry.setPassword("bbb");

       // 服務提供者協議配置
       ProtocolConfig protocol = new ProtocolConfig();
       protocol.setName("dubbo");
       protocol.setPort(20880);
       protocol.setThreads(200);

       // 注意:ServiceConfig爲重對象,內部封裝了與註冊中心的連接,以及開啓服務端口
       // 服務提供者暴露服務配置
       ServiceConfig<DubboApiService> service = new ServiceConfig<DubboApiService>(); // 此實例很重,封裝了與註冊中心的連接,請自行緩存,否則可能造成內存和連接泄漏
       service.setApplication(application);
       service.setRegistry(registry); // 多個註冊中心可以用setRegistries()
       service.setProtocol(protocol); // 多個協議可以用setProtocols()
       service.setInterface(DubboApiService.class);
       service.setRef(dubboApiService);
       service.setVersion("1.0.0");
       // 暴露及註冊服務
       service.export();
   }
 }

provider結構
在這裏插入圖片描述

ConsumerConfig

package com.dubbo.api.config;


import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.dubbo.api.service.DubboApiService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Classname ConsumerConfig
 * @Description TODO
 * @Date 2020/4/23 9:11
 * @Created by Administrator
 */
@Configuration
public class ConsumerConfig {

    @Bean
    public DubboApiService getConsumerConfig(){
        // 當前應用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("DubboConsumer");
        // qos-server can not bind localhost:22222  java.net.BindException: Address already in use: bind
        application.setQosEnable(true);
        application.setQosPort(44444);
        application.setQosAcceptForeignIp(false);
        // 連接註冊中心配置
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://127.0.0.1:2181");
        //registry.setPort(20881);
        //registry.setUsername("aaa");
        //registry.setPassword("bbb");
        // 注意:ReferenceConfig爲重對象,內部封裝了與註冊中心的連接,以及與服務提供方的連接
        // 引用遠程服務
        ReferenceConfig<DubboApiService> reference = new ReferenceConfig<DubboApiService>(); // 此實例很重,封裝了與註冊中心的連接以及與提供者的連接,請自行緩存,否則可能造成內存和連接泄漏
        reference.setApplication(application);
        reference.setRegistry(registry); // 多個註冊中心可以用setRegistries()
        reference.setInterface(DubboApiService.class);
        reference.setVersion("1.0.0");
        //啓動時檢查服務是否存在
        reference.setCheck(false);
        // 和本地bean一樣使用xxxService
        DubboApiService dubboApiService = reference.get(); // 注意:此代理對象內部封裝了所有通訊細節,對象較重,請緩存複用
        //如果要銷燬Cache中的ReferenceConfig,將銷燬ReferenceConfig並釋放對應的資源
        //reference.destroy();
        return  dubboApiService;
    }

}

consumer結構
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章