• 什么事dubbo
      • Apache Dubbo™ 是一款微服务框架(Microservices Framework),它提供高性能 RPC 通信、服务发现、流量管理等服务治理能力,为你提供构建大规模微服务集群所需的全套解决方案。
    • dubbo的特性
      • 面向接口编程
      • 服务的注册与发现
      • 负载均衡
      • 高度可扩展能力、运行期流量调度、可视化的服务治理与运维
    • dubbo-admin
      • 主要包含:服务管理 、路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能
    • 注册中心
      • zookeeper 或者redis
    • 通信协议:
      • 默认dubbo
    • SPI
      • SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现,简单来说,它就是一种动态替换发现的机制。使用SPI机制的优势是实现解耦,使得第三方服务模块的装配控制逻辑与调用者的业务代码分离。
      • 当服务提供者提供了接口的一种具体实现后,在META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;
      • 比如比较常见的协议,负载均衡,都可以通过SPI的方式进行定制化,自己扩展。
    • Adaptive
      • 可以通过URL控制访问哪些服务
    • dubbo可以定义Filter进行拦截,通过SPI
    • 负载均衡策略
      • Dubbo 提供了多种均衡策略(包括随机、轮询、最少活跃调用数、一致性Hash),缺省为random随机调用。
    • 异步调用
      • 配置async=”true”
      • 通过future获取结果
    • 自定义线程池
      • 通过重写,可以实现改造
    • JDK中的四种线程池
      • 固定个数、缓存、单个线程、可以执行延时任务的固定个数
    • 路由规则
      • 控制IP、服务权限的控制
    • 服务降级
      • 在 dubbo-admin管理控制台配置服务降级
        • mock=force:return+null
        • mock=fail:return+null
      • 指定返回简单值或者null

    image.png

    • 使用java代码 动态写入配置中心

      1. RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension() ;Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://IP:端 口")); registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService? category=configurators&dynamic=false&application=foo&mock=force:return+null"));
    • 整合hystrix

      • 容错策略
    • 读操作建议使用 Failover 失败自动切换,默认重试两次其他服务器。
    • 写操作建议使用 Failfast 快速失败,发一次调用失败就立即报错。
      • 整体调用流程要能说出来????
        1. 消费者通过Interface进行方法调用 统一交由消费者端的 Proxy 通过ProxyFactory 来进行代理
          对象的创建 使用到了 jdk javassist技术 2.交给Filter 这个模块 做一个统一的过滤请求 在SPI案例中涉及过 3.接下来会进入最主要的Invoker调用逻辑 通过Directory 去配置中新读取信息 最终通过list方法获取所有的Invoker 通过Cluster模块 根据选择的具体路由规则 来选取Invoker列表 通过LoadBalance模块 根据负载均衡策略 选择一个具体的Invoker 来处理我们的请求 如果执行中出现错误 并且Consumer阶段配置了重试机制 则会重新尝试执行
    1. 继续经过Filter 进行执行功能的前后封装 Invoker 选择具体的执行协议

    2. 客户端 进行编码和序列化 然后发送数据

    3. 到达Consumer中的 Server 在这里进行 反编码 和 反序列化的接收数据

    4. 使用Exporter选择执行器

    5. 交给Filter 进行一个提供者端的过滤 到达 Invoker 执行器

    6. 通过Invoker 调用接口的具体实现 然后返回

    dubbo - 图2

    dubbo - 图3

    • zookeeper中的目录结构什么样的?

      • consumers
      • providers
      • configuration
      • routers
    • 服务暴露过程

      • Inovoker准换成Exporter
    • dubbo所有的封装会变成invoker
    • 三次握手、四次挥手
    • 七层模型、四层模型
    • dubbo如何处理粘包、拆包??
    • 注册中心挂了,dubbo还能继续通信吗?
    • image.png
    • 如何用dubbo实现Ip透传
      • 不能用RpcContext.getContext().seXXX() 只能一次有效。。。作业写错了
    • image.png
    • image.png

    image.png
    image.png
    总结:不能在controller层赋值,应该是在filter里面传值