自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 RedisTemplate序列化StringRedisSerializer只能支持String的坑

项目使用了spring-data-redis包的RedisTemplate类进行redis操作,在配置value的序列化类使用了StringRedisSerializer,如下:private RedisTemplate<String, Object> buildRedisTemplate(JedisConnectionFactory connectionFactory) { ...

2018-12-30 23:56:14 32523 4

原创 JDK1.8源码分析:NIO缓冲区Buffer

概念Buffer接口是Java NIO的缓冲区的基础接口,定义了缓冲区操作的相关控制属性和操作方法。缓冲区是一个存放特定基础类型数据,如byte, char, int, long, float, double(不能是boolean),的容器,物理上是一个有界的线性数组。Buffer接口的具体实现类,如byte, int, long, float, double等,包含对应的类型的数组,如In...

2018-12-30 23:25:37 3812

原创 Dubbo源码分析:Dubbo协议客户端单一长连接RPC并发调用的结果获取

并发调用下结果获取的原理Dubbo协议在客户端针对每个Service调用,默认是使用单一Netty长连接来处理RPC调用请求的,而在客户端,如在web环境中,任何一个时刻,可能存在多个线程并发对该Service进行并发调用,这些请求都是通过该单一Channel发送和获取结果的,而Netty所有请求都是异步,故dubbo如何保证这些并发线程能正确获取到自己的请求结果,而不会造成数据混乱呢?核心实...

2018-12-30 00:09:50 5007

原创 Dubbo源码分析:全透明接入spring和ServiceBean和Referencebean的接口设计与实现

Spring Schema XML拓展机制:dubbo全透明融入spring的实现基础在spring项目中使用dubbo,一般由spring项目启动,会加载并解析resources目录下的xml,然后将xml配置文件中的配置加载成spring容器的bean。如果是普通spring项目,则一般会在web.xml中指定需要加载的,如applicationContext.xml,如下:&...

2018-12-27 14:53:33 5676

原创 Dubbo源码分析:客户端基于dubbo协议的RPC并发调用

概述

2018-12-24 23:39:53 3434

原创 Netty源码分析-基于Netty的心跳检测机制IdleStateHandler实现长连接

将timeout包的IdleStateHandler放到pipeline中,用于检测channel的空闲超时事件,即可以指定channel多久没有read或者write操作,则触发读写超时IO事件,

2018-12-23 17:08:42 4035

原创 Netty源码分析-数据处理器ChannelInboundHandler和ChannelOutboundHandler

概述Channel接口针对Channel的读入和写出IO事件的处理,定义了两个拓展接口:ChannelInboundHandler用于定义对读入IO事件的处理,ChannelOutboundHandler用于定义写出IO事件的处理。ChannelInboundHandlerChannelInboundHandler接口定义/** * {@link ChannelHandler} whic...

2018-12-23 15:01:32 8212 1

原创 Netty源码分析-数据处理器ChannelHandler的设计

概述

2018-12-23 00:28:18 3232

原创 Netty源码分析-ChannelHandler的包装器-ChannelHandlerConext

概念ChannelHandler的职责主要是定义对Channel中IO数据的处理逻辑,主要是面向业务逻辑的处理,只需按业务需要的数据处理顺序,通过调用ChannelPipeline的addLast等方法,添加到ChannelPipeline中即可,无需关心多个ChannelHandler在ChannelPipeline中如何联系起来的,这个工作由ChannelHandlerContext完成。...

2018-12-22 20:16:16 2449

原创 Netty源码分析-数据拦截和处理管道ChannelPipeline的设计

概念

2018-12-22 14:55:09 3431

原创 Netty源码分析-服务端创建SocketChannel的底层实现原理

概述过程NioEventLoop的selector监听到连接事件:其中ch为ServerSocketChannelServerSocketChannel的unsafe实现根据具体的ServerSocketChannel的实现,以下以NioServerSocketChannel为例:由1知,调用的是unsafe.read(),具体read实现如下:(1)doReadMessages...

2018-12-22 00:22:18 2835

原创 Netty源码分析-Java NIO和网络通信Channel

概念Java socket之BIO和NIO在网络编程当中,在应用层主要通过Socket Api来完成客户端和服务端之间的网络通信。BIO: 在Java中,服务端使用ServerSocket监听客户端连接请求,客户端使用Socket连接服务端,ServerSocket和Socket都是BIO,即阻塞IO。阻塞IO存在的问题是任何时候,在一个线程当中只能存在一个socket进行连接,不能多个s...

2018-12-21 00:58:41 2326

原创 Netty源码分析-线程模型与EventLoop事件循环机制

EventLoopGroup:事件处理线程池EventLoop:事件处理线程channel绑定eventLoop线程channel的IO请求处理

2018-12-20 15:56:13 2690

原创 Dubbo源码分析:序列化方式与调用

概述序列化模块主要为dubbo协议提供服务提供者和服务消费者之间的数据序列化功能。dubbo是一种适合于高并发、小数据量的互联网应用场景的框架,而序列化对于远程调用的响应速度,吞吐量,网络带宽消耗也其中至关重要的作用,是提高分布式系统性能的最关键因素之一。在源码实现中,在远程传输模块remoting,调用Transporter传输数据之前,通过Codec架构对数据进行序列化,在Codec中调...

2018-12-11 21:49:15 2902 1

原创 Dubbo源码分析:远程传输remoting

概述由rpc协议实现模块分析可知,远程通讯模块主要为rpc协议中的dubbo协议提供:服务提供者和服务消费者之间的数据传输功能。远程通讯对外提供了一个Exchange的概念,即消息交换。服务消费者:包含一个ExchangeClient,通过connect方法连接服务提供者,并指定对应的ExchangeHandler用于远程调用的处理,将请求的方法和参数通过URL的方式,传递给服务提供者;服...

2018-12-07 16:33:00 2228

原创 Dubbo源码分析:RPC协议详解

概述RPC协议模块主要定义了服务提供者提供服务,消费者调用服务的一个整体架构。服务提供者:当dubbo启动时,调用registry注册模块的RegistryProtocol,完成服务的相关元数据上传注册到注册中心,包括zookeeper,Redis或者多播;注册的具体方法为RegistryProtocol.export,export方法在进行注册前,会调用doLocalExport方法,在这...

2018-12-06 11:16:35 3494

原创 Dubbo源码分析:dubbo与spring融合

概述Dubbo框架主要是用于分布式系统中服务之间的远程调用。而分布式系统中的每个服务一般为采用spring框架搭建,通过spring容器管理beans,通过spring mvc提供restful接口,在service层进行业务逻辑处理。而不管是服务消费者引用的bean,还是服务提供者需要对外提供服务、进行注册的bean,都需要一种机制来触发其进行初始化,生成JVM堆的一个对象实例,同时由spr...

2018-12-05 22:44:44 3397

原创 Netty源码分析-BootStrap服务启动类

启动基类:AbstractBootStrap该类主要定义了客户端和服务端启动netty均需要的字段和方法,核心字段包括:EventLoopGroup:线程池,如果是服务端则在拓展类ServerBootstrap中可以选择再定义一个chilEventLoopGroup,用于处理已建立连接的客户端的请求。该线程池在服务端主要为acceptor提供执行线程,执行客户端的连接请求,而在客户端则为建立...

2018-12-02 19:56:35 4293

原创 Dubbo源码分析:RPC协议实现-服务端限流与Semaphore信号量

概述Dubbo支持在服务端通过在service或者method,通过executes参数设置每个方法,允许并发调用的最大线程数,即在任何时刻,只允许executes个线程同时调用该方法,超过的则抛异常返回,从而对提供者服务进行并发控制,保护资源。用法服务级别限制 com.foo.BarService 的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个:<dubbo...

2018-12-02 14:34:14 2245

原创 Dubbo源码分析:RPC协议实现-客户端限流

概述Dubbo支持在服务或者方法粒度,通过actives参数对该服务的所有方法或者该方法进行并发访问控制,即同一时刻只允许active个消费者请求并发调用服务,超过的请求需要等待,如果在timeout时间内还是无法执行调用,则异常退出。源码实现实现类:在rpc包下的ActiveLimitFilter,即通过过滤器的方式对请求进行过滤,当未达到actives个并发请求时,则将rpc请求直接传...

2018-12-02 11:45:28 3022

原创 Dubbo源码分析:RPC协议实现-RPC过程与核心接口设计

定义提供者Provider:服务提供者如何将自己能提供的服务暴露出去,使得服务消费者可以远程调用。消费者Consumer:服务消费者对自己需要的服务,如何感知该服务在哪里,如何通过远程调用的方式,调用服务提供者提供的服务。核心接口如下:核心接口设计Protocol:RPC协议接口export方法: 提供者需要实现export方法,定义如何将自己提供的服务保留出去,同时如何使得消...

2018-12-01 17:29:10 2243

原创 Dubbo源码分析:Register注册中心

Registry每个注册中心对应一个Registry实例,包括dubbo,zookeeper,redis, multicast。(1)Set类型的registed:记录provider注册过的service url。(2)ConcurrentMap<URL, Set> subscribed:consumer订阅URL,URL有变化时的监听器NotifyListener;其中多个N...

2018-12-01 14:07:10 6742

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除