`
huangjinjin520
  • 浏览: 71093 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

dubbo源码学习一:基础知识及使用的相关技术

阅读更多
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合),我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就是说服务提供方(Provider)发布的服务可以天然就是集群服务。

Dubbo的产生背景、最初的需求、架构设计 等可以详细看官方的文档:
http://dubbo.apache.org/

在看代码中觉得dubbo使用的主要技术如下:
    代理(Proxy:javassist等)
    反射(Invoke)
    协议(Protocol:DubboProtocl等)
    序列化(Hession等)
    NIO(netty,mina)
    SPI(java spi)
    装饰器模式(wrapper)
    观察者模式(订阅和监听)
    spring自定义标签(容器启动时bean的解析)
先去了解一下以上的技术会对看源码有很大的帮助!!!

今天先看看SPI技术:
SPI(Service Provider Interface)服务提供的接口,定义好一个接口,里面有很多方法,真正的服务提供方是这个接口的实现,在众多开源的项目中都大量使用了spi的技术,因为开源项目大多提供了给用户的拓展机制,比如dubbo提供了很多spi的接口让开发者可以自己实现,如:com.alibaba.dubbo.rpc.protocol 接口就是一个spi的接口,他的实现有:
registry=com.alibaba.dubbo.registry.integration.RegistryProtocol 
filter=com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper 
listener=com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper 
mock=com.alibaba.dubbo.rpc.support.MockProtocol 
injvm=com.alibaba.dubbo.rpc.protocol.injvm.InjvmProtocol 
dubbo=com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol 
rmi=com.alibaba.dubbo.rpc.protocol.rmi.RmiProtocol 
hessian=com.alibaba.dubbo.rpc.protocol.hessian.HessianProtocol 
com.alibaba.dubbo.rpc.protocol.http.HttpProtocol 
com.alibaba.dubbo.rpc.protocol.webservice.WebServiceProtocol 
thrift=com.alibaba.dubbo.rpc.protocol.thrift.ThriftProtocol 
memcached=memcom.alibaba.dubbo.rpc.protocol.memcached.MemcachedProtocol 
redis=com.alibaba.dubbo.rpc.protocol.redis.RedisProtocol


如果开发者想实现自己的协议,那么直接写一个类实现protocol接口,然后在resources/META-INF/dubbo/internal建一个文件如下:




文件名就是接口的全名就是你实现的接口的全包名+接口名,文件内容格式 为:key(协议名) = 接口的实现全包名+接口名,如下

    myProtocol=cn.myProtocolImpl.eProtocol.BitProtocol 

将自己的协议打包,使用时就可以通过 key 来使用自己的协议了

    <!-- 协议端口 部署到双网卡时加 host="172.21.28.98"-->   
    <dubbo:protocol name="myProtocl" host="127.0.0.1" port="9998" 
           accepts="1000" threadpool="fixed" threads="100" />

以上为基于spi去实现dubbo的拓展接口,下面实践一下,写一个基于java spi的demo
1、首先定义一个接口
public interface SPIService { 
public void say(); 

2、编写接口的实现,为了看效果我写了两个实现
public class SayHello implements SPIService { 
@Override 
public void say() { 
System.out.println("Say Hello"); 



public class SaySpi implements SPIService { 
@Override 
public void say() { 
System.out.println("Say Spi"); 


3、建文件夹resources/META-INF/services,在建好的目录下建一个文件,文件名是接口的全包名+路径,文件内容如下
com.spi.service.impl.SayHello 
com.spi.service.impl.SaySpi 
4、测试
public class TestSPI { 
public static void main(String[] args) { 
ServiceLoader<SPIService> loader = ServiceLoader.load(SPIService.class); 
for (SPIService service : loader) { 
service.say(); 



5、输出
Say Hello 
Say Spi 
从上面我们可以看到java spi在配置实现的时候是没有 key 的,dubbo为了通过用户的配置来动态的获取实现,所以对spi做了一些改造,可以通过key来动态的获取实现,比如协议有:dubbo、rmi、hession等,网络传输方式 :netty、mina、grizzy
Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension(); 
以上基本的了解了 spi 的工作机制及在dubbo中的作用。接下来会看dubbo自定义spring标签,以及自己实现一个spring的标签。

spring boot 各种it视频


  • 大小: 39.9 KB
  • 大小: 8.8 KB
0
0
分享到:
评论

相关推荐

    dubbo源码解析2

    在开始深入解析Dubbo源码之前,首先需要明确的是,Dubbo虽然代码量不算庞大,但是它涉及的技术领域非常广泛,对于初学者来说,可能需要具备一定的前置知识才能更好地理解和学习。以下是建议的学习路径: 1. **Java...

    dubbo源码解析

    综上所述,阅读和理解Dubbo源码需要较为扎实的Java基础和丰富的框架应用经验,对于希望深入学习分布式系统和服务治理的开发者来说,Dubbo是一个非常好的学习案例。通过本文的详细分析,可以帮助读者快速掌握Dubbo的...

    dubbo源码解析 1 pdf2.0

    根据给定的文件信息,以下是关于Dubbo源码解析的详细知识点: 首先,阅读Dubbo源码前需要一定的预备知识。这包括但不限于以下几点: 1. Java编程语言:掌握Java编程基础,阅读《Java编程思想》能够有助于理解源码...

    dubbo2.0源码解读

    了解Dubbo源码通常从其主要模块入手,如服务提供者(Provider)、服务消费者(Consumer)、注册中心(Registry)、协议层(Protocol)等。通过跟踪调用流程,理解服务发布、订阅、调用过程。 2. **Dubbo诞生的背景*...

    dubbo教程视频源码

    根据提供的文件信息,我们可以归纳出一系列与Dubbo相关的学习知识点。Dubbo是一款高性能、轻量级的开源微服务框架,由阿里巴巴开发并维护。它主要提供了面向接口的远程调用方法,可以方便地进行服务拆分和服务治理。...

    dubbo源码解读与实战.doc

    ### Dubbo源码解读与实战知识点详述 #### 一、Dubbo源码环境搭建 **1.1 开始前的准备** - **环境需求**:确保安装了Git、Maven(建议版本3.3+)、Java JDK 1.8或更高版本。 - **软件工具**:IDEA (IntelliJ IDEA)...

    dubbo源码视频教程

    【Dubbo源码视频教程】是一系列深入解析著名开源框架Dubbo源代码的教程资源,旨在帮助开发者深入了解Dubbo的工作原理、设计模式以及关键模块的实现。Dubbo是中国阿里巴巴公司开源的一款高性能、轻量级的Java服务治理...

    dubbo学习后自己的源代码

    通过这个项目,你不仅可以学习到Dubbo的基本使用,还可以深入理解分布式服务架构的设计和实现,为后续的微服务开发打下坚实基础。在实践中,你可以不断优化这三个模块,提升系统的稳定性和性能,体验到Dubbo的强大之...

    dubbo资源 dubbo-admin dubbo demo

    学习和理解这些资源,有助于开发者快速上手Dubbo,掌握服务治理的关键概念和技术,为构建分布式系统打下坚实的基础。同时,通过Dubbo-admin的实际操作,可以提高运维效率,确保服务的稳定性和可靠性。对于希望深入...

    dubbo-2.5.4官网源码下载

    通过深入研究dubbo-2.5.4的源码,开发者不仅可以掌握Dubbo的工作原理,还能学习到分布式系统设计、微服务治理等多个领域的高级技术,为构建高可用、高并发的分布式应用打下坚实基础。同时,源码分析也是提升个人编程...

    dubbo精品课程-基础篇

    《Dubbo精品课程-基础篇》是一门专为IT专业人士设计的深度学习课程,主要针对Apache Dubbo这一高性能、轻量级的Java RPC框架。Dubbo是阿里巴巴开源的一款优秀服务框架,广泛应用于分布式系统开发中,它能有效地解决...

    dubboDemo源码

    【标题】"dubboDemo源码"涉及到的核心知识点是Dubbo框架的应用,这是一个分布式服务框架,主要用于构建高性能、高可用的微服务系统。在dubboDemo中,我们通常会看到如何实现服务提供者(Provider)和服务消费者...

    dubbo使用例子

    【标题】"dubbo使用例子"揭示了这个压缩包文件主要是一个关于Apache Dubbo的实践教程。Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能,如服务注册与发现、调用监控、负载均衡等,是阿里...

    dubbo全套视频教程(含有文档、ppt、源码)

    综上所述,这套视频教程涵盖了从基础到高级全面的Dubbo相关知识点,并配以丰富的文档、PPT及源码资源,非常适合想要深入了解和掌握Dubbo技术栈的学习者。无论是初学者还是有一定经验的开发者都能从中获益良多。希望...

    dubbo2.8.4源代码

    在深入理解Dubbo的源码之前,我们需要对Java、Spring、网络通信等相关知识有一定基础。 【描述】"git下载,调整pom文件,通过mvn install -Dmaven.test.skip=true打包" 这段描述揭示了获取和构建Dubbo源代码的过程...

    一.dubbox(dangdang V2.8.4)+springBoot(1.4.2.RELEASE)+dubbo-monitor-web 监控项目源码

    【描述】表明这是一个结合了dubbox、springBoot和dubbo-monitor-web的项目源码,适合开发者进行学习和实践,以了解如何将这三个组件集成到一起,实现服务的监控和管理。 【标签】“dubbo monitor”进一步强调了本...

    Dubbo视频教程--基础篇源代码6-10

    通过这四节视频教程,学习者可以逐步了解和掌握Dubbo的基本用法,包括服务提供、服务消费、部署和监控,从而为后续深入学习Dubbo的高级特性打下坚实的基础。同时,了解Maven、Linux和Tomcat的相关知识,也对提升Java...

Global site tag (gtag.js) - Google Analytics