博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dubbo的服务提供者provider启动的一些理解
阅读量:5978 次
发布时间:2019-06-20

本文共 3357 字,大约阅读时间需要 11 分钟。

dubbo的demo中的provider实现很简单,

1.接口如下:

package com.alibaba.dubbo.demo;public interface DemoService {    String sayHello(String name);}

2.实现类:

package com.alibaba.dubbo.demo.provider;import com.alibaba.dubbo.demo.DemoService;import com.alibaba.dubbo.rpc.RpcContext;import java.text.SimpleDateFormat;import java.util.Date;public class DemoServiceImpl implements DemoService {    public String sayHello(String name) {        System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());        return "Hello " + name + ", response form provider: " + RpcContext.getContext().getLocalAddress();    }}

3.主要配置文件dubbo-demo-provider.xml内容如下:

4.main类:

import org.springframework.context.support.ClassPathXmlApplicationContext;public class Provider {    public static void main(String[] args) throws Exception {        //Prevent to get IPV6 address,this way only work in debug mode        //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not        System.setProperty("java.net.preferIPv4Stack", "true");        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});        context.start();        System.in.read(); // press any key to exit    }}

5.那么dubbo配置文件的解析是怎么解决的呢?是什么时候开始的呢?

1)在源码的dubbo-config下的dubo-config-spring中的META-INF下面有两个文件:

spring.schemas和spring.handlers

spring.schemas内容为:http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd

解说:dubbo.xsd是dubbo在spring中可以使用的元素的定义,如protocol,registry等

spring.handlers内容为:

http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler

解说:DubboNamespaceHandler是注册dubbo中用到的各个元素的解析类,它的源码内容如下:

public class DubboNamespaceHandler extends NamespaceHandlerSupport {    static {        Version.checkDuplicate(DubboNamespaceHandler.class);    }    public void init() {        registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));        registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true));        registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true));        registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));        registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));        registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));        registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));        registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));        registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));        registerBeanDefinitionParser("annotation", new DubboBeanDefinitionParser(AnnotationBean.class, true));    }

而DubboBeanDefinitionParser是具体解析的类,解析dubbo-demo-provider.xml中的配置,并封装相关的bean.

从而进行服务启动的一些准备,包括服务export,注册等。

2)什么开始的,通过下面的截图可以一目了然:

dubbo的服务提供者provider启动的一些理解

注:1)dubbo的源码地址:

2)spring schema的学习请看以下链接:

转载于:https://blog.51cto.com/woodpecker/2070546

你可能感兴趣的文章
Lync 2013快速入门手册之三:组织Lync会议
查看>>
CMD 修改Host文件 BAT
查看>>
android幻灯片效果实现-Gallery
查看>>
实现Instagram的Material Design概念设计
查看>>
CentOS 6.x 快速安装L2TP ***
查看>>
一篇文章能够看懂基础源代码之JAVA篇
查看>>
Goldengate双向复制配置
查看>>
Oracle官方内部MAA教程
查看>>
DNS相关配置
查看>>
miniWindbg 功能
查看>>
mysql基于mysqlslap的压力测试
查看>>
CF772E Verifying Kingdom
查看>>
rename设计思想(Perl版)
查看>>
第二次冲刺 第七天
查看>>
矩阵之矩阵乘法(转载)
查看>>
Python _内置函数3_45
查看>>
cf-Igor In the Museum (dfs)
查看>>
数据之路 Day4 - Python基础4
查看>>
使用openCV打开USB摄像头(UVC 小米micro接口)
查看>>
Luogu P3577 [POI2014]TUR-Tourism
查看>>