dubbo入门

为何不选择使用Java原生的NIO而选择netty?

一、使用jdk自带的nio的类库和api繁杂,使用麻烦。你须要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等
二、netty底层IO模型随意切换,这些都只须要作很小的改动
三、netty自带拆包和解包,异常检测等机制让你从繁琐的nio细节中解脱出来,让你只须要关心业务
四、netty解决了jdk空轮询的bug
五、netty底层对线程。Selector作了不少细节优化,精心设计的reactor线程作到很是高效的并发处理
六、自带各类协议栈
七、社区活跃
八、稳定、健壮、已经历普遍使用和验证

消费者请求调用链

InvokerInvocationHandler#invoke
->MockClusterInvoker#invoke
->AbstructClusterInvoker#invoke
->FailOverClusterInvoker#doInvoke
->InvokerWrapper#invoke
->ProtocolFilterWrapper#invoke
->ConsumerContextFilter#invoke
->ProtocolFilterWrapper#invoke
->FutureFilter#invoke
->ProtocolFilterWrapper.Invoker#invoke
->MonitorFilter#invoke
->ProtocolFilterWrapper.Invoker#invoke
->CacheFilter.invoke
->ListenerInvokerWrapper#invoke
->AbstractInvoker#invoke
->DubboInvoker.doInvoke
->ReferenceCountExchangeClient#request
->HeaderExchangeClient#request
->HeaderExchangeChannel#request
->AbstractPeer#send
->AbstractClient#send
->NettyChannel#send

dubbo 请求处理流程

一、消费者启动时,经过spring容器加载dubbo META-INF下spring.handler文件去获取dubbo的命名空间处理工具类DubboNamespaceHandler,该类中注册了dubbo各类命名空间的解析方式DubboBeanDefinitionParser,而后经过DubboBeanDefinitionParser将配置解析处理注入到spring容器中。dubbo会为消费者中的每一个service生成一个代理实现类,每一个代理类都会关联一个InvocationHandler,代理上每一个方法的执行都会被分发到其关联的InvocationHandler的invoke方法上。
二、消费者从容器中获取到service实例,调用方法的时候,代理调用InvokerInvocationHandler的invoke方法,默认使用failOver策略,在FailOverClusterInvoker的doInvoke方法中获取server服务的list,而后经过dubbo默认的随机负载均衡策略随机获取一台服务实例地址,并访问。调用会走过一系列的调用链,而后进入到DubboInvoker的doInvoke方法中,该方法中获取到ExchangeClient的实现类ReferenceCountExchangeClient并调用其request方法,最后进入到HeaderExchangeChannel的request方法,HeaderExchangeChannel的request方法将请求包装成一个request,发送到NettyChannel中,由NettyChannel将请求发送到服务器

dubbo和spring cloud

一、协议上,dubbo使用rpc协议,服务调用者严格依赖于服务提供方提供的service接口,要求在开发的过程当中严格的进行版本管理;spring cloud使用restful的http协议,服务提供方和消费方不存在直接的依赖关系,相对来讲更加灵活
二、宏观来讲,dubbo专一于服务治理,而且在服务治理、灰度发布、流量分发这方面作的比 Spring Cloud 还好;spring cloud则提供了一站式的微服务解决方案,考虑到了服务治理的方方面面
三、社区活跃度上,spring cloud更新更加频繁,社区也更活跃
四、背景上,spring cloud依托于spring,spring专一于企业级开源框架的研发;dubbo是alibaba的服务化治理的核心框架,中文文档完善,但alibaba是一个商业公司,仍然以服务自身业务为主
相关文章
相关标签/搜索