- 浏览: 68247 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 10841.ps 链接: https://pan.baidu ... -
Spring常用工具类
2018-06-03 21:45 1774Spring 的优秀工具类盘点 ( http://www.ib ... -
利用Sharding-Jdbc实现分表
2018-05-24 22:32 3696你们团队使用SpringMVC+Spr ... -
MINA原理详解
2018-05-19 13:51 14471. 通过SocketConnector同服务器端建立连接 ... -
最近有人说我欺骗消费者,今天来一波视频分享
2018-05-12 21:00 1137最近有人说我欺骗消费者,今天来一波视频分享 dubbo入门 ... -
SVN多版本库环境的搭建
2018-05-02 21:00 1097一、 1、启动SVN sudo svn ... -
前端 Java Python等资源合集大放送
2018-04-21 22:11 650如果需要学习视频,欢 ... -
Nginx会话保持之nginx-sticky-module模块
2018-04-16 20:34 1913在使用负载均衡的时候会遇到会话保持的问题,常用的方法有: 1. ... -
dubbo源码学习(四):暴露服务的过程
2018-04-14 11:38 944dubbo采用的nio异步的通信,通信协议默认为 netty, ... -
dubbo源码学习(四)初始化过程细节:解析服务
2018-04-12 20:32 573今天将真正去看dubbo内部的实现过程,看dubbo的源码前我 ... -
dubbo源码学习(二) : spring 自定义标签
2018-04-09 20:29 588做dubbo的配置时很容易发现,dubbo有一套自己的标签,提 ... -
Dubbo多注册中心和Zookeeper服务的迁移
2018-04-06 08:58 1459一、Dubbo多注册中心 1、 应用场景 例如阿里有些服务 ... -
worker模式
2018-03-29 20:16 594今天来学学,大家也好对线程池有一个更好的理解。 public ... -
线程各种状态转移分析
2018-03-28 22:13 862线程在它的生命周期 ... -
生产者-消费者模式实现
2018-03-26 22:45 1121生产者是指:生产数据的线程 消费者是指:使用数据的线程 生产者 ... -
java并发之同步辅助类Phaser
2018-03-19 21:46 1036Phaser含义: 更加复杂和强大的同步辅助类。它允许并发执 ... -
java并发之同步辅助类CyclicBarrier
2018-03-18 20:13 771CyclicBarrier含义: 栅栏允许两个或者多个线程在 ... -
java并发之同步辅助类semaphore
2018-03-14 21:24 733semaphore(seməˌfôr)含义: 信号量就是可以 ... -
Tomcat 集群 文件上传下载的共享问题 NFS配置
2018-03-12 21:50 616Tomcat 集群时上传文件时如何使得多部tomcat中的文件 ... -
it技术谱图分享
2018-03-10 22:05 4731、程序开发语言综述 2、前端工程师必备技能 3、 ...
相关推荐
获取到文件夹名称: 01分布式基础 获取到文件夹名称: 02分布式协调服务-zookeeper 获取到文件夹名称: 03分布式服务治理-dubbo 获取到文件夹名称: 04分布式事务解决方案 获取到文件夹名称: 06Netty框架源码 ...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 源码分析: 、 、 、 并发 面试题总结: 必备知识点: 线程池:、 JVM 其他 I/O : Java 8 :、、 Java9~...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 、 、 并发 面试题总结: 必备知识点: JVM 其他 I/O : Java 8 :、、 Java编程规范: 、 设计模式 : ...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 、 、 并发 面试题总结: 必备知识点: JVM 其他 I/O : Java 8 :、、 Java9~Java14 : Java编程规范: 、...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 、 、 并发 面试题总结: 必备知识点: JVM 其他 I/O : Java 8 :、、 设计模式 : 网络 操作系统 操作...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 源码分析: 、 、 、 并发 面试题总结: 必备知识点: 线程池:、 JVM 其他 I/O : Java 8 :、、 Java9~...
通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 源码分析: 、 、 、 并发 面试题总结: 必备知识点: 线程池:、 JVM 其他 I/O : Java 8 :、、 Java9~...
基础知识系统总结: Java常见编程题 :、 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 、 、 并发 面试题总结: 必备知识点: JVM 其他 I/O : Java 8 :、、 Java9~Java14...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 、 、 并发 面试题总结: 必备知识点: JVM 其他 I/O : Java 8 :、、 Java9~Java14 : Java编程规范: 、...
java抓取技术源码 本课程主要是使用 Spring技术栈 + dubbo 开发一个类似当当的图书电商后台的实战教程。 视频学习请戳: 课程特点: 1.课程的技术体系足够系统、全面以及细致:课程中涉及的主要技术包括: Spring IO...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 、 、 并发 面试题总结: 必备知识点: JVM 其他 I/O : Java 8 :、、 Java9~Java14 : Java编程规范: 、...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 源码分析: 、 、 、 并发 面试题总结: 面试常问知识点: 线程池:、 JVM 其他 I/O : Java 8 :、、 ...
基础知识系统总结: 重要知识点详解: (很重要的一个数据结构,用好枚举真的没有那么简单!) 其他: 容器 源码分析: 、 、 、 并发 面试题总结: 面试常问知识点: 线程池:、 JVM 其他 Linu