dubbo入参和返回值不要使用枚举

2,815 阅读1分钟

问题

服务消费者,报错信息

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 值,建议先升级服务提供方,这样服务消费方不会传入新值。

阿里规范

总结

接口的入参和返回值都不要使用枚举。

参考

dubbo.apache.org/zh-cn/docs/…

www.zhihu.com/question/52…