首页 > 其他分享 >dubbo

dubbo

时间:2022-08-20 13:12:16浏览次数:47  
标签: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,调用,字节,--,失败,序列化
From: https://www.cnblogs.com/dhdnm/p/16607555.html

相关文章

  • 关于服务器部署了dubbo服务提供者,但是在外网无法调用到该服务的问题
    1.修改host文件 vim /etc/hosts 2.酱紫改  106.13.26.144ls2rZsaaHi106.13.26.144是公网ip,ls2rZsaaHi是主机名主机名怎么看? hostname查看主机名 保存hosts文......
  • HSF转dubbo
    背景说明HSF是闭源的,考虑用开源产品(dubbo)进行替代。如果是考虑要从一个rpc框架转成另一个,或许也可以参考本文。主要思想:进行rpc的发布、订阅操作,其实是集中在2个类里面......
  • Linux下搭建ZooKeeper集群并整合Dubbo配置
    1.环境说明Zookeeper不仅可以单机提供服务,同时也支持多机组成集群来提供服务,实际上Zookeeper还支持另外一种伪集群的方式,也就是可以在一台物理机上运行多个Zookeeper......
  • Dubbo源码(八) - 负载均衡
    前言本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo负载均衡,英文名称为LoadBalance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行......
  • 一文搞懂 Dubbo 入门理论
    RPC简介 ● RPC,RemoteProcedureCall,远程过程调用,是一种跨系统间服务调用的协议或框架 ● 在很多企业,在内部存在大量的业务子系统,这些子系统都承担独立的业务功......