Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RabbitMQ骆驼消费者错误-java.net.SocketException:连接重置_Java_Rabbitmq_Apache Camel - Fatal编程技术网

RabbitMQ骆驼消费者错误-java.net.SocketException:连接重置

RabbitMQ骆驼消费者错误-java.net.SocketException:连接重置,java,rabbitmq,apache-camel,Java,Rabbitmq,Apache Camel,骆驼兔的新特性。使用ApacheCamel编写了一个简单的RabbitMQ使用者 onException(StateException.class).log(LoggingLevel.WARN,"WarnMessage = Error on ID and Status ${body}.") .asyncDelayedRedelivery().redeliveryDelay(5000).maximumRedeliveries(1) .setHeade

骆驼兔的新特性。使用ApacheCamel编写了一个简单的RabbitMQ使用者

onException(StateException.class).log(LoggingLevel.WARN,"WarnMessage = Error on ID and Status ${body}.")
            .asyncDelayedRedelivery().redeliveryDelay(5000).maximumRedeliveries(1)
            .setHeader(RabbitMQConstants.REQUEUE, constant(true))
            .handled(true)
            .setFaultBody(constant(true));

from(STATE__Q_URL).delay(200).log(LoggingLevel.DEBUG,"Incoming Body is --> ${body}")
          /*  .wireTap("direct:logtofile")*/.to("invokeManager")
            .log(LoggingLevel.INFO, "Message = Completed for ${body}");
invokeManager
当前在从队列中弹出一个值后进行一个简单的rest调用它可以处理大约100条消息,并开始抛出此错误

java.net.SocketException: Connection reset

java.net.SocketException: Broken pipe (Write failed)
    at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.8.0_144]
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111) ~[na:1.8.0_144]
    at java.net.SocketOutputStream.write(SocketOutputStream.java:155) ~[na:1.8.0_144]
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) ~[na:1.8.0_144]
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) ~[na:1.8.0_144]
    at java.io.DataOutputStream.flush(DataOutputStream.java:123) ~[na:1.8.0_144]
    at com.rabbitmq.client.impl.SocketFrameHandler.flush(SocketFrameHandler.java:177) ~[amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.AMQConnection.flush(AMQConnection.java:559) ~[amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.AMQCommand.transmit(AMQCommand.java:127) ~[amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.AMQChannel.quiescingTransmit(AMQChannel.java:396) ~[amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.AMQChannel.quiescingTransmit(AMQChannel.java:378) ~[amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.AMQChannel.quiescingRpc(AMQChannel.java:313) ~[amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.ChannelN.close(ChannelN.java:601) ~[amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.ChannelN.close(ChannelN.java:534) ~[amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.StrictExceptionHandler.handleChannelKiller(StrictExceptionHandler.java:68) [amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.StrictExceptionHandler.handleConsumerException(StrictExceptionHandler.java:58) [amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:154) [amqp-client-4.2.1.jar!/:4.2.1]
    at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:100) [amqp-client-4.2.1.jar!/:4.2.1]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_144]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_144]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]

2018-02-25 18:06:17.551  WARN 4155 --- [0.42.31.42:5672] c.r.c.impl.ForgivingExceptionHandler     : An unexpected connection driver error occured (Exception message: Connection reset)

不确定我做错了什么,非常感谢您的帮助。

@Robbo_UK是的,我发现问题出在消费者的缓冲区大小上。为了解决这个问题,您需要设置几个字段

            +"&prefetchEnabled=true"
            +"&prefetchCount=100"
            +"&threadPoolSize="100"
            +"&channelPoolMaxSize="100"
我从代码中随机复制了这些值。这将解决您的问题


因此,这将限制推送到使用者的消息数量,并防止缓冲区溢出。

im也有同样的问题。。你有什么收获吗?谢谢你的反馈。我的理解是,出现问题的原因是一次过载了太多的数据。我注意到它是如何说所有的信息都被消费了,但没有确认。还有一个问题是threadPoolSize 100有点大?@Robbo_UK,你是对的,它一次推送所有它能推的东西,并填充消费者缓冲区,所以我们需要限制它推给消费者的东西。在我这方面,每个线程都将其写入DB并确认,这是一个非常简单的写入操作,我觉得它处理100次非常平滑。在它的关键,看看每个线程的内存足迹,如果线程没有搅动太多内存,我们就好了。最后,如果发现问题,还可以尝试运行探查器。我觉得100英镑就可以了。