1.dubbo:
Java之间内部调用,使用 私有序列化二进制协议 1.去中心化,客户端直连服务端 2.动态注册和发现服务 3.高效稳定的网络传输 4.高效可容错的序列化2.弊端:
不支持跨语言。 序列化: Dubbo序列化支持java、compactedjava、nativejava、fastjson、dubbo、fst、hessian2、kryo, 其中默认hessian2。其中java、compactedjava、nativejava属于原生java的序列化。3.callType类型:
(1)sync 同步调用 (2)async 异步调用 (3)oneWay 单向调用4.负载均衡:
当有多个提供者是,如何选择哪个进行调用的负载算法。 1.随机 2.轮询 3.最少活跃数 4.一致性hash5.容错机制:当服务调用失败时采取的策略
1.失败自动切换,
重试其他服务器 默认是2
-->再调用2次 实际总共可调用三次
1.调用失败后基于retries=“2” 属性重试其它服务器
2.快速失败
-->快速失败,只发起异地调用,失败立即报错
3.忽略失败
-->失败后忽略,不抛出异常给客户端。
4.失败重试
-->失败自动恢复,后台记录失败请求,定时重发。通常用于消息操作。
5.并行调用
-->只要成功一个就返回,并行调用制定数量机器,可通过 forks =”2“ 来设置并行数
6.广播调用
-->广播调用所有提供者,追个调用,任意一台报错则报错
6.拆包粘包
6.1产生的原因:
tcp 为了提高性能,将发送端口的数据放到缓冲区,等待缓冲区满了之后,再将缓冲区的数据发送到 接受方。 1.应用程序写入的数据大于MSS大小,这将会发生拆包。 2.应用程序写入数据小于MSS大小,这将会发生粘包。 3.接收方法不及时读取套接字缓冲区数据,这将发生粘包。 6.2.拆包和粘包解决办法: 1.设置定长信息,服务端每次读取既定长度的内容作为一条完整的消息。 2.使用带消息头的协议,消息头存储消息开始的标识以及消息长度信息,服务端获取消息头的时候解析出消息长度,然后获取该长度的内容。7.dubbo协议:
magic: 2字节 类似java字节码文件里的魔数,用来判断是不是dubbo协议的数据包。魔数是常量0xdabb,用于判断报文的开始。 flag: 1字节 标志位, 一共8个地址位 低四位用来表示消息体数据用的序列化工具的类型(默认hessian), 高四位中, 第一位为1表示是request请求, 第二位为1表示双向传输(即有返回response), 第三位为1表示是心跳ping事件。 status: 1字节 状态位, 设置请求响应状态,dubbo定义了一些响应的类型。具体类型见 com.alibaba.dubbo.remoting.exchange.Response invoke id: 8字节 消息id, long 类型。每一个请求的唯一识别id(由于采用异步通讯的方式,用来把请求request和返回的response对应上) body length: 4字节 消息体 body 长度, int 类型,即记录Body Content有多少个字节。7.dubbo的SPI 扩展
为了生成某个对象时, 1.读取META-INFO 下的配置文件 配置文件中以 key-value的形式存在,key是父类名称,vlue是对应的实现类的路径 若仅有类路径 可能是扩展点 2.根据入参 查询到具体的类,生成对应的实力。 判断是否存在set方法,进行赋值。 --注释:根据方法名查找,若没有找到根据 类型名 此时会生成代理对象(dubbo) //先去spring的bean容器中获取,获取不到自己生成 根据@Adaptive 以及url 进行判断 3.IOC注入,属性赋值 4.包装类set<class> 遍历所有的包装类, 5.类加载8.Spring 整合 dubbo
@Configuration @EnableDubbo(scanBasePackages = "org.apache.dubbo.demo.provider") //扫描路径 @EnadbleDubboConfig //处理其中配置,生成对应的configbean //注册beanDefinition 为空的属性 //bean属性赋值 @DubboComponentScan //处理@Service注解 生成bean //处理 @Reference注解 注入点,生成注入点集合,inject()方法循环调用,给每个注入点赋值。 @PropertySource("classpath:/spring/dubbbo-provider.properties") // 扫描指定路径 classpath:/spring/dubbbo-provider.properties , 并添加到容器中标签:dubbo,调用,字节,--,失败,序列化 From: https://www.cnblogs.com/dhdnm/p/16607555.html