dubbo源码实践-config层例子

10 篇文章 0 订阅

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值