ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

dubbo

2022-08-20 13:34:25  阅读:150  来源: 互联网

标签:dubbo 调用 字节 -- 失败 序列化


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.一致性hash    

5.容错机制:当服务调用失败时采取的策略

  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,调用,字节,--,失败,序列化
来源: https://www.cnblogs.com/dhdnm/p/16607555.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有