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
1 2 3 4 5 6 7 8 9 10 11 | @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 , 并添加到容器中 |
用于记录,学习。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App