dubbo服务端启动流程

dubbo版本:2.6.1

启动dubbo服务层的时候,如果剥离了Spring,则使用dubbo自带的硬编码的方式编写启动配置文件.代码如下:

public static void main(String[] args) throws InterruptedException {
    /*接口实现*/
    GreetingService greetingService = new GreetingServiceImpl();

    /*application配置*/
    ApplicationConfig applicationConfig = new ApplicationConfig();
    applicationConfig.setName("dubbo-demo-provider");

    /*注册中心配置,对应于consumer*/
    RegistryConfig registryConfig = new RegistryConfig();
    registryConfig.setProtocol("zookeeper");
    registryConfig.setAddress("127.0.0.1:2181");
    registryConfig.setClient("zkclient");

    /*服务层配置,提供服务的协议信息*/
    ProtocolConfig protocolConfig = new ProtocolConfig();
    protocolConfig.setName("dubbo");
    protocolConfig.setPort(20880);
    protocolConfig.setThreadpool("cached");
    protocolConfig.setThreads(100);

    /*provider的接口配置,聚合各种配置信息,同样ServiceConfig也是重对象*/
    ServiceConfig<GreetingService> serviceConfig = new ServiceConfig<GreetingService>();
    serviceConfig.setApplication(applicationConfig);
    serviceConfig.setRegistry(registryConfig);
    serviceConfig.setProtocol(protocolConfig);
    serviceConfig.setInterface(GreetingService.class);
    serviceConfig.setRef(greetingService);
    serviceConfig.setVersion("1.0.0");
    serviceConfig.setGroup("dubbo");

    /*暴露以及注册服务*/
    serviceConfig.export();

    //挂起当前线程
    Thread.currentThread().join();

通过调用export方法完成服务的注册.

首先进入ServiceConfig export()方法,如果没有设置延迟则直接调用doExport() 方法.

在doExport()方法中会进行一系列的判断和赋值.

接着进入:

doExportUrls() 方法

获取注册服务的url集合

下面进入:

doExportUrlsFor1Protocol(protocolConfig, registryURLs);

这里如果没有设置协议则默认会用dubbo协议.

接着进入:

exportLocal(url);

下面就该proxyFactory登场了:

默认使用JavassistProxyFactory调用其

getInvoker(T proxy, Class<T> type, URL url)

方法.里面重写了doInvoke方法

Export方法在进入到DubboProtocol前需要经过装饰器模式包装过的ProtocolFilterWrapper->ProtocolListenerWrapper->RegistryProtocol.

RegistryProtocol中注册服务,serviceUrl注册到注册中心,供客户端订阅.可以看出经常实现单例模式中的加锁机制实现:

最后走到:

DubboProtocolexport(Invoker<T> invoker)

调用:

openServer(url);

在通信对象中ExchangeServer绑定ExchangeHandler获取exporterMap中的Exporter调用服务.

通过循环将所有的注册信息加入exporters中.

通过这几个步骤完成服务端的初始化.

总体流程图:

初学的同学可以跟着debug跑一次看下代码的实现过程,这很重要.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值