dubbo源码实践-config层例子

Posted alf_cee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo源码实践-config层例子相关的知识,希望对你有一定的参考价值。

1 概述

本文主要参考官方例子:https://cn.dubbo.apache.org/zh/docsv2.7/user/configuration/api/

今天例子我们总要使用Config层的API来搭建dubbo调用的例子。通过图可以看到,主要是两个类:ReferenceConfig类(客户端使用该类)、ServiceConfig类(服务端使用该类)。

2 服务端(服务提供端)代码

ServiceConfigTest类

package org.example.dubbo.config;

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.example.test.protocol.AlfService;
import org.example.test.protocol.IAlfService;

import java.io.IOException;

/** 服务端:使用ServiceConfig启动服务 */
public class ServiceConfigTest 
    public static void main(String[] args) throws IOException 
        // 服务实现
        IAlfService alfService = new AlfService();

        // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("xxx");

        // 不使用注册中心
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("N/A");

        // 服务提供者协议配置:协议dubbo,端口12345,线程200个
        ProtocolConfig protocol = new ProtocolConfig();
        protocol.setName("dubbo");
        protocol.setPort(12345);
        protocol.setThreads(200);

        // 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口

        // 服务提供者暴露服务配置
        ServiceConfig<IAlfService> service = new ServiceConfig<IAlfService>(); // 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏
        service.setApplication(application);
        service.setRegistry(registry); // 多个注册中心可以用setRegistries()
        service.setProtocol(protocol); // 多个协议可以用setProtocols()
        service.setInterface(IAlfService.class);
        service.setRef(alfService);
        service.setVersion("1.0.0");

        // 暴露及注册服务
        service.export();

        System.in.read();
    

3 客户端(服务消费端)代码

package org.example.dubbo.config;

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.example.test.protocol.IAlfService;

/** 客户端:使用ReferenceConfig调用服务 */
public class ReferenceConfigTest 
    public static void main(String[] args) 
        // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("yyy");

        // 不使用注册中心
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("N/A");

        // 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接

        // 引用远程服务
        ReferenceConfig<IAlfService> reference = new ReferenceConfig<IAlfService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏
        reference.setApplication(application);
        reference.setRegistry(registry); // 多个注册中心可以用setRegistries()
        reference.setInterface(IAlfService.class);
        reference.setVersion("1.0.0");
        reference.setUrl("dubbo://localhost:12345");

        // 和本地bean一样使用xxxService
        IAlfService alfService = reference.get(); // 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用
        System.out.println(alfService.sayHolle("ABC"));
    

4 运行结果

先启动服务端,再启动客户端。客户端传的入参是ABC,收到的相应是hi ABC。

以上是关于dubbo源码实践-config层例子的主要内容,如果未能解决你的问题,请参考以下文章

dubbo源码实践-protocol层例子

dubbo源码实践-protocol层例子

dubbo源码实践-Exchange 信息交换层例子

dubbo源码实践-Exchange 信息交换层例子

dubbo源码实践-transport 网络传输层的例子

dubbo源码实践-transport 网络传输层的例子