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层例子的主要内容,如果未能解决你的问题,请参考以下文章