摘要:Javaassist 就是一个用来处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同时也可以去生成一个新的类对象,通过完全手动的方式。 引入依赖 <dependency> <groupId>org.javassist< 阅读全文
posted @ 2020-06-16 13:29 cao_xiaobo 阅读(108) 评论(0) 推荐(0) 编辑
摘要:一、使用示例 (1)创建一个XxxFilter,并实现com.alibaba.dubbo.rpc.Filter 这个类 public class MyDubboFilter implements Filter { public Result invoke(Invoker<?> invoker, In 阅读全文
posted @ 2020-06-16 13:24 cao_xiaobo 阅读(235) 评论(2) 推荐(0) 编辑
摘要:当一个应用既是一个服务的提供者,同时也是这个服务的消费者的时候,可以直接对本机提供的服务发起本地调用。从 2.2.0 版本开始,Dubbo 默认在本地以 injvm 的方式暴露服务,这样的话,在同一个进程里对这个服务的调用会优先走本地调用。 与本地对象上方法调用不同的是,Dubbo 本地调用会经过 阅读全文
posted @ 2020-06-16 13:18 cao_xiaobo 阅读(329) 评论(0) 推荐(0) 编辑
摘要:什么是泛化调用? 泛化调用就是服务消费者端因为某种原因并没有该服务接口,这个原因有很多,比如是跨语言的,一个PHP工程师想调用某个java接口,他并不能按照你约定,去写一个个的接口,Dubbo并不是跨语言的RPC框架,但并不是不能解决这个问题,这个PHP程序员搭建了一个简单的java web项目,引 阅读全文
posted @ 2020-06-16 13:13 cao_xiaobo 阅读(259) 评论(0) 推荐(0) 编辑
摘要:本地伪装通常用于在远程调用出错的情况下服务降级,即本地伪装用来做容错处理 通过将服务端设置睡眠使用得客户端调用超时,抛出异常 public String sayHello(String name) { // Dubbo 默认的超时时间是 1000 ms,这里通过睡眠 5000ms 来达到触发超时异常 阅读全文
posted @ 2020-06-16 13:10 cao_xiaobo 阅读(169) 评论(0) 推荐(0) 编辑
摘要:本地存根的工作方式与 AOP 的 around advice 类似,而本地伪装的工作方式等同于 AOP 中的 after-throwing advice,也就是说,只有当远程调用发生 exception 的时候才会执行本地伪装。本地存根和本地伪装的工作流程如下图所示: 服务消费者发起调用 如果服务消 阅读全文
posted @ 2020-06-16 13:08 cao_xiaobo 阅读(82) 评论(0) 推荐(0) 编辑
摘要:前言 长连接和短连接 短连接:每次通信结束后关闭连接,下次通信需要重新创建连接;优点就是无需管理连接,无需保活连接; 长连接:每次通信结束不关闭连接,连接可以复用,保证了性能;缺点就是连接需要统一管理,并且需要保活; 主流的RPC框架都会追求性能选择使用长连接,所以如何保活连接就是一个重要的话题,也 阅读全文
posted @ 2020-06-16 13:06 cao_xiaobo 阅读(188) 评论(0) 推荐(0) 编辑
摘要:方法说明 oninvoke方法:必须具有与真实的被调用方法sayHello相同的入参列表:例如,oninvoke(String name) onreturn方法:至少要有一个入参且第一个入参必须与sayHello的返回类型相同,接收返回结果:例如,onreturnWithoutParam(Strin 阅读全文
posted @ 2020-06-16 13:02 cao_xiaobo 阅读(78) 评论(0) 推荐(0) 编辑
摘要:Dubbo 提供了4种负载均衡实现,分别是 基于权重随机算法的 RandomLoadBalance 基于最少活跃调用数算法的 LeastActiveLoadBalance 基于hash一致性的 ConsistentHashLoadBalance 基于加权轮询算法的 RoundRobinLoadBal 阅读全文
posted @ 2020-06-16 12:56 cao_xiaobo 阅读(56) 评论(0) 推荐(0) 编辑
摘要:官方介绍 为了避免单点故障,现在的应用通常至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多的服务器。这样,在同一环境下的服务提供者数量会大于1。对于服务消费者来说,同一环境下出现了多个服务提供者。这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用。另外服务调用失败时的处理 阅读全文
posted @ 2020-06-16 12:53 cao_xiaobo 阅读(44) 评论(0) 推荐(0) 编辑
摘要:服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者。服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者 Dubbo 目前提供了三种服务路由实现,分别为 条件路由 ConditionRout 阅读全文
posted @ 2020-06-16 12:51 cao_xiaobo 阅读(38) 评论(0) 推荐(0) 编辑
摘要:前言 集群容错源码包含四个部分,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance 集群工作过程可分为两个阶段: 第一个阶段是在服务消费者初始化期间,集群 Cluster 实现类为服务消费者创建 Cluster Invoker 实例, 阅读全文
posted @ 2020-06-16 12:49 cao_xiaobo 阅读(46) 评论(0) 推荐(0) 编辑
摘要:一、前言 Dubbo内核 dubbo所有功能都是基于dubbo内核之上完成的,dubbo内核由四部分构成,分别为SPI、Adaptive、Wrapper、Activate。而dubbo的内核设计原则,也是我们所熟悉的aop,ioc与动态编译compiler,这些称之为dubbo的内核原理。 Wrap 阅读全文
posted @ 2020-06-16 12:47 cao_xiaobo 阅读(257) 评论(0) 推荐(0) 编辑
摘要:Adaptive是Dubbo的自适应拓展机制。自适应拓展机制是为了解决什么问题? 解决如何根据运行时参数信息动态选择需要加载的拓展的类 常用的拓展类: interface com.alibaba.dubbo.cache.CacheFactory interface com.alibaba.dubbo 阅读全文
posted @ 2020-06-16 12:40 cao_xiaobo 阅读(112) 评论(0) 推荐(0) 编辑
摘要:SPI 全称为 Service Provider Interface,是一种服务发现机制 一、Java SPI 从上面可以看出Java中的SPI最大的缺点是会加载一些不必要的组件。 二、Dubbo SPI (1)基本原理 Dubbo在某个接口上加上@SPI注解后,表明该接口为可扩展接口 Extens 阅读全文
posted @ 2020-06-16 12:36 cao_xiaobo 阅读(70) 评论(0) 推荐(0) 编辑
摘要:服务提供者服务暴露过程是,当服务提供者NettyServer启动完成后,向ZK注册订阅的过程 服务消费者服务暴露过程是,创建代理对象的时候,注ZK注册订阅的过程 一、服务提供方 注册服务:调用register方法,ZookeeperRegistry中的doRegister方法。zk节点上生成prov 阅读全文
posted @ 2020-06-16 12:32 cao_xiaobo 阅读(134) 评论(0) 推荐(0) 编辑
摘要:一、Dubbo中的URL 一个标准的 URL 格式至多可以包含如下的几个部分 protocol://username:password@host:port/path?key=value&key=value 在 dubbo 中,也使用了类似的 URL,主要用于在各个扩展点之间传递数据,组成此 URL 阅读全文
posted @ 2020-06-16 12:29 cao_xiaobo 阅读(154) 评论(0) 推荐(0) 编辑
摘要:RPC 起源 RPC 这个概念术语在上世纪 80 年代由 Bruce Jay Nelson 提出。这里我们追溯下当初开发 RPC 的原动机是什么?在 Nelson 的论文 "Implementing Remote Procedure Calls" 中他提到了几点: 简单:RPC 概念的语义十分清晰和 阅读全文
posted @ 2020-06-16 12:28 cao_xiaobo 阅读(705) 评论(0) 推荐(0) 编辑
摘要:执行过程如下图所示 代理bean方法调用,即代理bean方法调用 我们知道demoService的bean是一个代理类,并且这个代理类继承com.alibaba.dubbo.common.bytecode.Proxy这个类,代理类中sayHello方法内部代码如下: (来源于Dubbo官网) /** 阅读全文
posted @ 2020-06-16 12:24 cao_xiaobo 阅读(349) 评论(0) 推荐(0) 编辑
摘要:服务提供者初始化过程,即ServiceBean 初始化过程 一、解析配置文件 spring在解析配置文件的过程中,会找到dubbo 命名空间对应的handler,DubboNamespaceHandler public class DubboNamespaceHandler extends Name 阅读全文
posted @ 2020-06-16 12:14 cao_xiaobo 阅读(141) 评论(0) 推荐(0) 编辑