问题
服务消费者,报错信息
Caused by: com.alibaba.dubbo.remoting.RemotingException: Fail to decode request due to: RpcInvocation
at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.returnFromResponse(DefaultFuture.java:245)
原因
入参使用了枚举,但是服务消费者和服务提供者的枚举值不一样,导致服务消费者解码(即反序列化)服务提供者的响应数据的时候异常。
服务提供者是正常执行。
解决方法
服务消费者和服务提供者的枚举值要一样。
最佳实践
最好不要使用枚举,因为服务消费者和服务提供者不一致会报错。而且每次修改枚举值,都要同时升级服务消费者和服务提供者。
如果实在要用,要注意升级顺序:
枚举值
如果是完备集,可以用 Enum,比如:ENABLE, DISABLE。
如果是业务种类,以后明显会有类型增加,不建议用 Enum,可以用 String 代替。
如果是在返回值中用了 Enum,并新增了 Enum 值,建议先升级服务消费方,这样服务提供方不会返回新值。
如果是在传入参数中用了 Enum,并新增了 Enum 值,建议先升级服务提供方,这样服务消费方不会传入新值。
阿里规范
总结
接口的入参和返回值都不要使用枚举。