- 什么事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
- 在 dubbo-admin管理控制台配置服务降级

使用java代码 动态写入配置中心
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 快速失败,发一次调用失败就立即报错。
- 整体调用流程要能说出来????
- 消费者通过Interface进行方法调用 统一交由消费者端的 Proxy 通过ProxyFactory 来进行代理
对象的创建 使用到了 jdk javassist技术 2.交给Filter 这个模块 做一个统一的过滤请求 在SPI案例中涉及过 3.接下来会进入最主要的Invoker调用逻辑 通过Directory 去配置中新读取信息 最终通过list方法获取所有的Invoker 通过Cluster模块 根据选择的具体路由规则 来选取Invoker列表 通过LoadBalance模块 根据负载均衡策略 选择一个具体的Invoker 来处理我们的请求 如果执行中出现错误 并且Consumer阶段配置了重试机制 则会重新尝试执行
- 消费者通过Interface进行方法调用 统一交由消费者端的 Proxy 通过ProxyFactory 来进行代理
- 整体调用流程要能说出来????
继续经过Filter 进行执行功能的前后封装 Invoker 选择具体的执行协议
客户端 进行编码和序列化 然后发送数据
到达Consumer中的 Server 在这里进行 反编码 和 反序列化的接收数据
使用Exporter选择执行器
交给Filter 进行一个提供者端的过滤 到达 Invoker 执行器
通过Invoker 调用接口的具体实现 然后返回
- dubbo结构分析
- dubbo三层
- 业务层
- RPC 层
- Remoting 层


zookeeper中的目录结构什么样的?
- consumers
- providers
- configuration
- routers
服务暴露过程
- Inovoker准换成Exporter
- dubbo所有的封装会变成invoker
- 三次握手、四次挥手
- 七层模型、四层模型
- dubbo如何处理粘包、拆包??
- 注册中心挂了,dubbo还能继续通信吗?

- 如何用dubbo实现Ip透传
- 不能用RpcContext.getContext().seXXX() 只能一次有效。。。作业写错了




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