dubbo使用遇到的问题 (旧业务过渡到dubbo)

本文总结了在使用Dubbo过程中遇到的问题,包括传输字节流的8MB限制及其解决方法,分布式事务的处理策略,实体对象的序列化需求,多点部署和服务注册,ZK端口冲突,服务失败的重试机制以及启动时检查的配置。通过这些经验分享,有助于更好地理解和应对Dubbo在实际项目中的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其文档地址:
源码git地址:

公司最近业务扩充从原先古老的spring架构SOA服务化,为分布式拆分,选了dubbo这个上手快的设计架构,刚毕业啥也没接触过,作为初学者在这中间遇到了很多问题,以下先简略的整理出来。
先引入项目依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
碰到的问题:

1.传输字节流限制:

代码质量不过关导致超出dubbo支持的最大传输字节,导致服务崩溃而关闭:

在项目中遇到使用 dubbo 进行服务间调用(provider-consumer),由于系统需要传输文件,于是使用字节流在provider 和 consumer间通信,但是在

使用 dubbo时,收到报错,提示 payload 过大,查阅资料发现,provider 和 consumer 之间的传输 有效载荷 不得大于 8兆  payload=88388608(=8M)

,而这个属性是可选属性,所以可以自己在配置文件中配置

  <dubbo:protocol payload="883886080" name="" port="2880" />

2.分布式事务:

本地事务放在最先 ,远程事务按其本地事务一层层往下封装业务。

原先垂直式的业务调用,事务是基于本地内存管理的,因此要对其进行服务拆分,异常回滚能够保证事务的原子性。

3.序列化:

远程传输的数据模型(实体等)必须实现序列化

旧业务代码,以前是本地内存创建的实体对象,在做分布式网络拆分后,TCP/IP协议是基于二进制流的,因此原先这些实体必须实现序列化。

4.多点部署:

一个服务多服务器同个zk注册,多个zk注册(一个服务注册到多个注册中心,可只在其中一个中心订阅)

5.zk端口冲突:

按照ip+端口决定唯一性,开发阶段经常会遇到在一台机器启动同一个端口的服务,原来问题出在这。

6.服务失败请求3次机制:

dubbo遇到服务调用失败默认会共调用3次请求,如开发过程中遇到某一事务没控制好,会导致3次脏数据的入库

7.启动时检查

在刚进行拆分重构时建议关闭这个启动时检查,以方便开发,可以无序的启动相关服务。

缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true。
关闭所有服务的启动时检查:(没有提供者时报错)
   <dubbo:consumer check="false" />
关闭某个服务的启动时检查:(没有提供者时报错)
   <dubbo:reference interface="com.test.testService" check="false" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值