使用Alibaba RSocket调用服务出现MonoContextWrite转Integer类转换异常原因是什么
异常产生原因
- Reactor版本跨端不兼容:
MonoContextWrite是Reactor 3.4.0及以上版本新增的Mono实现类,如果服务端引入的Reactor版本高于客户端依赖的Reactor版本,客户端在处理服务端返回的响应时,无法正确识别该类型,会在代理层的类型转换逻辑中直接将MonoContextWrite实例当做业务值转换,触发类转换异常,你遇到的转Integer的报错,是代理层内部处理响应状态码的逻辑错误拿到了该对象导致的。 - 服务端返回值与接口定义不匹配:你服务端实现中
return Mono.just(response);的response变量如果实际是Integer类型,和接口定义的Mono<String>返回值类型不匹配,使用JSON序列化时不会触发即时报错,客户端反序列化时代理层会先将响应包装为MonoContextWrite,后续类型转换逻辑出错时就会直接抛出该类转换异常。 - 服务注册的全限定名不匹配:需要确认客户端
RSocketRemoteServiceBuilder中配置的.service("com.example.rsocket.ExampleService"),和服务端ExampleService接口的实际全限定包名、类名完全一致,如果不一致Broker会返回错误响应,客户端代理层处理错误响应时会错误将包装后的MonoContextWrite当做业务返回值进行类型转换,触发报错。 - 序列化配置冲突:虽然你两端都配置了JSON序列化,但是如果任意一端自定义了Jackson序列化规则、或者引入的Jackson版本差异过大,也可能导致响应序列化/反序列化异常,触发该类转换错误。
内容的提问来源于stack exchange,提问作者user11149927
相关产品推荐
相关产品推荐

