dubbox 服务异常:java.io.IOException: com.esotericsoftware.kryo.KryoException: Buffer underflow
调用服务的时候报了下面的错误。没看明白是什么原因造成的。
com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method getCustomerCard in the service com.yiguo.qiakr.customer.service.CustomerCardDubboService. Tried 3 times of the providers [10.4.27.216:18602] (1/1) from the registry 127.0.0.1:2181 on the consumer 10.4.30.207 using the dubbo version 2.8.4. Last error is: Failed to invoke remote method: getCustomerCard, provider: dubbo://10.4.27.216:18602/com.yiguo.qiakr.customer.service.CustomerCardDubboService?anyhost=true&application=qiakr-merchant&check=false&connections=20&dubbo=2.8.4&generic=false&group=annotationConfig&interface=com.yiguo.qiakr.customer.service.CustomerCardDubboService&methods=clearCustomerCard,getCustomerCardById,updateMobile,generatePersonCode,getCustomerCardByPhone,countCustomerCardByCustomerIdList,updateCustomerCardCreateDate,updateCustomerCard,updateCustomerExtCardNo,getCustomerCard,getAllCustomerCardVoListByUnionId,getActiveCustomerIdList,resetCustomerExtCardNo,createCustomerCard,updateMobileAndVerifyCode,isCreateCustomerCard,deleteByCustomerIdAndSupplierId,insertCustomerCard&monitor=dubbo%3A%2F%2F127.0.0.1%3A2181%2Fcom.alibaba.dubbo.registry.RegistryService%3Fapplication%3Dqiakr-merchant%26dubbo%3D2.8.4%26pid%3D14117%26protocol%3Dregistry%26refer%3Ddubbo%253D2.8.4%2526interface%253Dcom.alibaba.dubbo.monitor.MonitorService%2526pid%253D14117%2526timestamp%253D1498098857236%26registry%3Dzookeeper%26timestamp%3D1498098857236&organization=dubbox&owner=programmer&pid=14117&protocol=dubbo&revision=1.3.0-SNAPSHOT&serialization=kryo&side=consumer&timeout=2000×tamp=1498098857222&validation=true&version=1.0, cause: java.io.IOException: com.esotericsoftware.kryo.KryoException: Buffer underflow. Serialization trace: supplierId (com.yiguo.qiakr.customer.obj.CustomerCard) java.io.IOException: com.esotericsoftware.kryo.KryoException: Buffer underflow. Serialization trace: supplierId (com.yiguo.qiakr.customer.obj.CustomerCard) at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:127) at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:140) at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:151) at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:87) at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:117) at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:98) at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:134) at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:95) at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:46) at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:134) at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: com.esotericsoftware.kryo.KryoException: Buffer underflow. Serialization trace: supplierId (com.yiguo.qiakr.customer.obj.CustomerCard) at com.esotericsoftware.kryo.io.Input.require(Input.java:181) at com.esotericsoftware.kryo.io.Input.readVarLong(Input.java:690) at com.esotericsoftware.kryo.io.Input.readLong(Input.java:685) at com.esotericsoftware.kryo.serializers.DefaultSerializers$LongSerializer.read(DefaultSerializers.java:133) at com.esotericsoftware.kryo.serializers.DefaultSerializers$LongSerializer.read(DefaultSerializers.java:123) at com.esotericsoftware.kryo.Kryo.readObjectOrNull(Kryo.java:730) at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:113) at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528) at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:761) at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:125) ... 24 more
at com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:108)
:
at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:227)
at com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:72)
at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:52)
at com.alibaba.dubbo.common.bytecode.proxy9.getCustomerCard(proxy9.java)
at yike.service.CustomerOrderService.getOrderVoList(CustomerOrderService.java:1823)
at yike.service.CustomerOrderService$$FastClassBySpringCGLIB$$45e15f42.invoke(
返回值超过4096字节了吧,https://github.com/dangdangdotcom/dubbox/blob/master/dubbo-common/src/main/java/com/alibaba/dubbo/common/serialize/support/kryo/KryoObjectOutput.java#L35 这个 /** Creates a new Output for writing to an OutputStream. A buffer size of 4096 is used. */ public Output (OutputStream outputStream) { this(4096, 4096); if (outputStream == null) throw new IllegalArgumentException("outputStream cannot be null."); this.outputStream = outputStream; }
配置url里加上body=一个个足够大的数