dubbo學習(三)配置dubbo API方式配置


provider(生產者)

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 zhbf.common.dubbo.user.UserService;
import zhbf.user.impl.UserServiceImpl;

import java.io.IOException;

public class ProviderAPI {
    public static void main(String[] args) throws IOException {

        // 服務實現
        UserService userService = new UserServiceImpl();

        // 當前應用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("user-service");

        // 連接注冊中心配置
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://127.0.0.1:2181");

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

        // 注意:ServiceConfig為重對象,內部封裝了與注冊中心的連接,以及開啟服務端口

        // 服務提供者暴露服務配置
        ServiceConfig<UserServiceImpl> service = new ServiceConfig<UserServiceImpl>(); // 此實例很重,封裝了與注冊中心的連接,請自行緩存,否則可能造成內存和連接泄漏
        service.setApplication(application);
        service.setRegistry(registry); // 多個注冊中心可以用setRegistries()
        service.setProtocol(protocol); // 多個協議可以用setProtocols()
        service.setInterface(UserService.class);
        service.setRef(new UserServiceImpl());

        // 暴露及注冊服務
        service.export();

        System.out.println("按任意鍵退出");
        System.in.read();
    }
}

consumer(消費者)

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import zhbf.common.VO.UserVO;
import zhbf.common.dubbo.user.UserService;

import java.util.List;

public class ConsumerAPI {
    public static void main(String[] args) throws Exception {
        // 當前應用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("yyy");

        // 連接注冊中心配置
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://127.0.0.1:2181");

        // 注意:ReferenceConfig為重對象,內部封裝了與注冊中心的連接,以及與服務提供方的連接

        // 引用遠程服務
        ReferenceConfig<UserService> reference = new ReferenceConfig<UserService>(); // 此實例很重,封裝了與注冊中心的連接以及與提供者的連接,請自行緩存,否則可能造成內存和連接泄漏
        reference.setApplication(application);
        reference.setRegistry(registry); // 多個注冊中心可以用setRegistries()
        reference.setInterface(UserService.class);

        // 和本地bean一樣使用userService
        UserService userService = reference.get(); // 注意:此代理對象內部封裝了所有通訊細節,對象較重,請緩存復用

        List<UserVO> list = userService.listUser(); // 執行遠程方法
        System.out.println( list.toString() ); // 顯示調用結果
    }
}

特殊場景

方法級別的設置

...//其他配置同理,只列出不同的地方
 
// 方法級配置
List<MethodConfig> methods = new ArrayList<MethodConfig>();
MethodConfig method = new MethodConfig();
method.setName("createXxx");
method.setTimeout(10000);
method.setRetries(0);
methods.add(method);
 
// 引用遠程服務
ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此實例很重,封裝了與注冊中心的連接以及與提供者的連接,請自行緩存,否則可能造成內存和連接泄漏
...
reference.setMethods(methods); // 設置方法級配置
 
...//其他配置同理,只列出不同的地方

點對點鏈接(直連對應地址)

...//其他配置同理,只列出不同的地方
 
ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此實例很重,封裝了與注冊中心的連接以及與提供者的連接,請自行緩存,否則可能造成內存和連接泄漏
// 如果點對點直連,可以用reference.setUrl()指定目標地址,設置url后將繞過注冊中心,
// 其中,協議對應provider.setProtocol()的值,端口對應provider.setPort()的值,
// 路徑對應service.setPath()的值,如果未設置path,缺省path為接口名
reference.setUrl("dubbo://10.20.130.230:20880/com.xxx.XxxService"); 
 
...//其他配置同理,只列出不同的地方


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM