- 浏览: 71093 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Alex_Cheung:
对了,第二个没有提取码,请知悉。
一大波视频分享 -
Alex_Cheung:
谢谢分享。
一大波视频分享 -
Jiy:
很详细,谢谢分享
java并发之同步辅助类Phaser -
walle1027:
非常不错,学习了。
java并发之同步辅助类Phaser -
huangjinjin520:
somefuture 写道除了单词写错了 其他挺好的已更正
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视频
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视频
发表评论
-
一大波视频分享
2018-06-09 09:36 11381.ps 链接: https://pan.baidu ... -
Spring常用工具类
2018-06-03 21:45 1814Spring 的优秀工具类盘点 ( http://www.ib ... -
利用Sharding-Jdbc实现分表
2018-05-24 22:32 3772你们团队使用SpringMVC+Spr ... -
MINA原理详解
2018-05-19 13:51 14861. 通过SocketConnector同服务器端建立连接 ... -
最近有人说我欺骗消费者,今天来一波视频分享
2018-05-12 21:00 1235最近有人说我欺骗消费者,今天来一波视频分享 dubbo入门 ... -
SVN多版本库环境的搭建
2018-05-02 21:00 1193一、 1、启动SVN sudo svn ... -
前端 Java Python等资源合集大放送
2018-04-21 22:11 695如果需要学习视频,欢 ... -
Nginx会话保持之nginx-sticky-module模块
2018-04-16 20:34 1964在使用负载均衡的时候会遇到会话保持的问题,常用的方法有: 1. ... -
dubbo源码学习(四):暴露服务的过程
2018-04-14 11:38 978dubbo采用的nio异步的通信,通信协议默认为 netty, ... -
dubbo源码学习(四)初始化过程细节:解析服务
2018-04-12 20:32 612今天将真正去看dubbo内部的实现过程,看dubbo的源码前我 ... -
dubbo源码学习(二) : spring 自定义标签
2018-04-09 20:29 630做dubbo的配置时很容易发现,dubbo有一套自己的标签,提 ... -
Dubbo多注册中心和Zookeeper服务的迁移
2018-04-06 08:58 1501一、Dubbo多注册中心 1、 应用场景 例如阿里有些服务 ... -
worker模式
2018-03-29 20:16 633今天来学学,大家也好对线程池有一个更好的理解。 public ... -
线程各种状态转移分析
2018-03-28 22:13 898线程在它的生命周期 ... -
生产者-消费者模式实现
2018-03-26 22:45 1157生产者是指:生产数据的线程 消费者是指:使用数据的线程 生产者 ... -
java并发之同步辅助类Phaser
2018-03-19 21:46 1102Phaser含义: 更加复杂和强大的同步辅助类。它允许并发执 ... -
java并发之同步辅助类CyclicBarrier
2018-03-18 20:13 831CyclicBarrier含义: 栅栏允许两个或者多个线程在 ... -
java并发之同步辅助类semaphore
2018-03-14 21:24 778semaphore(seməˌfôr)含义: 信号量就是可以 ... -
Tomcat 集群 文件上传下载的共享问题 NFS配置
2018-03-12 21:50 658Tomcat 集群时上传文件时如何使得多部tomcat中的文件 ... -
it技术谱图分享
2018-03-10 22:05 5111、程序开发语言综述 2、前端工程师必备技能 3、 ...
相关推荐
在开始深入解析Dubbo源码之前,首先需要明确的是,Dubbo虽然代码量不算庞大,但是它涉及的技术领域非常广泛,对于初学者来说,可能需要具备一定的前置知识才能更好地理解和学习。以下是建议的学习路径: 1. **Java...
综上所述,阅读和理解Dubbo源码需要较为扎实的Java基础和丰富的框架应用经验,对于希望深入学习分布式系统和服务治理的开发者来说,Dubbo是一个非常好的学习案例。通过本文的详细分析,可以帮助读者快速掌握Dubbo的...
根据给定的文件信息,以下是关于Dubbo源码解析的详细知识点: 首先,阅读Dubbo源码前需要一定的预备知识。这包括但不限于以下几点: 1. Java编程语言:掌握Java编程基础,阅读《Java编程思想》能够有助于理解源码...
了解Dubbo源码通常从其主要模块入手,如服务提供者(Provider)、服务消费者(Consumer)、注册中心(Registry)、协议层(Protocol)等。通过跟踪调用流程,理解服务发布、订阅、调用过程。 2. **Dubbo诞生的背景*...
根据提供的文件信息,我们可以归纳出一系列与Dubbo相关的学习知识点。Dubbo是一款高性能、轻量级的开源微服务框架,由阿里巴巴开发并维护。它主要提供了面向接口的远程调用方法,可以方便地进行服务拆分和服务治理。...
### Dubbo源码解读与实战知识点详述 #### 一、Dubbo源码环境搭建 **1.1 开始前的准备** - **环境需求**:确保安装了Git、Maven(建议版本3.3+)、Java JDK 1.8或更高版本。 - **软件工具**:IDEA (IntelliJ IDEA)...
【Dubbo源码视频教程】是一系列深入解析著名开源框架Dubbo源代码的教程资源,旨在帮助开发者深入了解Dubbo的工作原理、设计模式以及关键模块的实现。Dubbo是中国阿里巴巴公司开源的一款高性能、轻量级的Java服务治理...
通过这个项目,你不仅可以学习到Dubbo的基本使用,还可以深入理解分布式服务架构的设计和实现,为后续的微服务开发打下坚实基础。在实践中,你可以不断优化这三个模块,提升系统的稳定性和性能,体验到Dubbo的强大之...
学习和理解这些资源,有助于开发者快速上手Dubbo,掌握服务治理的关键概念和技术,为构建分布式系统打下坚实的基础。同时,通过Dubbo-admin的实际操作,可以提高运维效率,确保服务的稳定性和可靠性。对于希望深入...
通过深入研究dubbo-2.5.4的源码,开发者不仅可以掌握Dubbo的工作原理,还能学习到分布式系统设计、微服务治理等多个领域的高级技术,为构建高可用、高并发的分布式应用打下坚实基础。同时,源码分析也是提升个人编程...
《Dubbo精品课程-基础篇》是一门专为IT专业人士设计的深度学习课程,主要针对Apache Dubbo这一高性能、轻量级的Java RPC框架。Dubbo是阿里巴巴开源的一款优秀服务框架,广泛应用于分布式系统开发中,它能有效地解决...
【标题】"dubboDemo源码"涉及到的核心知识点是Dubbo框架的应用,这是一个分布式服务框架,主要用于构建高性能、高可用的微服务系统。在dubboDemo中,我们通常会看到如何实现服务提供者(Provider)和服务消费者...
【标题】"dubbo使用例子"揭示了这个压缩包文件主要是一个关于Apache Dubbo的实践教程。Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能,如服务注册与发现、调用监控、负载均衡等,是阿里...
综上所述,这套视频教程涵盖了从基础到高级全面的Dubbo相关知识点,并配以丰富的文档、PPT及源码资源,非常适合想要深入了解和掌握Dubbo技术栈的学习者。无论是初学者还是有一定经验的开发者都能从中获益良多。希望...
在深入理解Dubbo的源码之前,我们需要对Java、Spring、网络通信等相关知识有一定基础。 【描述】"git下载,调整pom文件,通过mvn install -Dmaven.test.skip=true打包" 这段描述揭示了获取和构建Dubbo源代码的过程...
【描述】表明这是一个结合了dubbox、springBoot和dubbo-monitor-web的项目源码,适合开发者进行学习和实践,以了解如何将这三个组件集成到一起,实现服务的监控和管理。 【标签】“dubbo monitor”进一步强调了本...
通过这四节视频教程,学习者可以逐步了解和掌握Dubbo的基本用法,包括服务提供、服务消费、部署和监控,从而为后续深入学习Dubbo的高级特性打下坚实的基础。同时,了解Maven、Linux和Tomcat的相关知识,也对提升Java...