• dubbo入门


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

    1、使用jdk自带的nio的类库和api繁杂,使用麻烦。你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等
    2、netty底层IO模型随意切换,这些都只需要做很小的改动
    3、netty自带拆包和解包,异常检测等机制让你从繁琐的nio细节中解脱出来,让你只需要关心业务
    4、netty解决了jdk空轮询的bug
    5、netty底层对线程。Selector做了很多细节优化,精心设计的reactor线程做到非常高效的并发处理
    6、自带各种协议栈
    7、社区活跃
    8、稳定、健壮、已经历广泛使用和验证
    

    消费者请求调用链

    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 请求处理流程

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

    dubbo和spring cloud

    1、协议上,dubbo使用rpc协议,服务调用者严格依赖于服务提供方提供的service接口,要求在开发的过程中严格的进行版本管理;spring cloud使用restful的http协议,服务提供方和消费方不存在直接的依赖关系,相对来说更加灵活
    2、宏观来说,dubbo专注于服务治理,并且在服务治理、灰度发布、流量分发这方面做的比 Spring Cloud 还好;spring cloud则提供了一站式的微服务解决方案,考虑到了服务治理的方方面面
    3、社区活跃度上,spring cloud更新更加频繁,社区也更活跃
    4、背景上,spring cloud依托于spring,spring专注于企业级开源框架的研发;dubbo是alibaba的服务化治理的核心框架,中文文档完善,但alibaba是一个商业公司,仍然以服务自身业务为主
  • 相关阅读:
    windows 上安装redis和windows上redis与php扩展
    mysql存储过程详细讲解及完整实例下载
    html模板生成静态页面及模板分页处理
    php中自动加载类_autoload()和spl_autoload_register()实例详解
    php+mysql事务处理例子详细分析实例
    git学习和常用命令
    block理解
    oc中数组,字典,集合使用的备忘录
    oc log的记录 宏的正确姿势
    swift中的optional
  • 原文地址:https://www.cnblogs.com/canmeng-cn/p/9503225.html
Copyright © 2020-2023  润新知