Dubbo使用的问题

本文探讨了Dubbo在实际应用中常见的问题,包括父子类属性冲突、自定义异常处理、IP暴露问题及服务调用失败原因。提供了具体场景下的解决策略,如修改类结构、调整异常位置和配置服务暴露参数。

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

dubbo使用注意点

1.父子类有相同属性时值丢失

原因分析:dubbo默认采用的是hessian序列化&反序列化方式,JavaDeserializer在获取fileds时,采用了Map去重。但是在读取值时,根据serializer的顺序,对于同名字段,子类的该字段值会被赋值两次,总是被父类的值覆盖,导致子类的字段值丢失。

解决:删掉子类中与父类同名属性

2. 自定义异常被包装成RuntimeException

如果Provider中的api和自定义Exception定义都是在一个api.jar中,那么是不会有任何问题的。但是如果自定义Exception是在一个单独的比如common.jar包中就会出现这个问题(此时api和model在另一个api.jar中)因为dubbo Provider的ExceptionFilter.java对异常统一封装导致;

解决:将自定义异常和接口类放到一个包中即可

3.IP暴露问题

如果你服务的调用方和消费方不在同一个内网中,那么就会希望Dubbo服务通过外网IP暴露。不过不好意思,dubbo默认的服务暴露行为搞不定,因为dubbo默认暴露的是内网IP地址。
这个时候,我们就需要借助两个参数:dubbo.protocol.host和dubbo.protocol.port,通过这两个参数显示申明我们暴露服务的IP和Port,这两个参数即可以通过配置文件方式指定,也可以通过JVM参数方式指定;

dubbo服务不能调用原因:

  • 服务提供者的ip与注册中心ip不一致

1 、如何进行异常查找:

rpc调用异常,不能正常调用
日志、控制台异常核对关键信息
接口对接,从调用方与提供方
核对配置信息是否正常,
在核对是否匹配

2、开发时消费者端ip配置

在程序配置文件中 配置dubbo 的注册中心“dubbo.registry.address” 时要
注意不要配置127.0.0.1 要配置为 localhost。
127.0.0.1 localhost localhost.localdomain

3、ip不一致原因

serviceIp并非本地en0 Ip(本地物理网卡ip),而是utunN IP(虚拟网卡IP)。
导致服务消费者启动失败,原因是找不到服务提供者。根本问题是因为双网卡
或者本地开了VPN。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值