Spring mvc Camel RouteBuilder rabbitMQ Connection reset exception

754 Views Asked by At

I have moved from spring 4.x to 5.2.0 and to camel 2.21.0, during the patching process of the packages, rabbitmq client began to throw the following exceptions:

com.rabbitmq.client.impl.ForgivingExceptionHandler 

An unexpected connection driver error occurred (Exception message: Connection reset)
Connection failed, will retry in 5000ms

java.io.IOException
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:126)
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:122)
    at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:362)
    at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:64)
    at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.init(AutorecoveringConnection.java:99)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:944)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:903)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:861)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1044)
    at org.apache.camel.component.rabbitmq.RabbitMQEndpoint.connect(RabbitMQEndpoint.java:228)
    at org.apache.camel.component.rabbitmq.RabbitMQConsumer.openConnection(RabbitMQConsumer.java:64)
    at org.apache.camel.component.rabbitmq.RabbitMQConsumer.getConnection(RabbitMQConsumer.java:75)
    at org.apache.camel.component.rabbitmq.RabbitConsumer.reconnect(RabbitConsumer.java:307)
    at org.apache.camel.component.rabbitmq.RabbitMQConsumer$StartConsumerCallable.call(RabbitMQConsumer.java:216)
    at org.apache.camel.component.rabbitmq.RabbitMQConsumer$StartConsumerCallable.call(RabbitMQConsumer.java:196)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    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:748)
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error
    at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
    at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36)
    at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:494)
    at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:306)
    ... 16 more
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:210)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
    at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288)
    at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91)
    at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164)
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:580)
    ... 1 more

the RouteBuilder is like the following:

String conStr = "rabbitmq:sheker?hostname=%s"
                +"&portNumber=%s"
                +"&username=%s"
                +"&password=%s"
                +"&queue=%s"
                +"&routingKey=%s"
                +"&autoDelete=false"
                +"&concurrentConsumers=%d";

from(String.format(conStr, hostname, port, username, password, queueName, queueName, queueConcurrentConsumers))
                .throttle(throttleRequestCount)
                .timePeriodMillis(throttleInterval)
                .bean(Processor.PROCESSOR_BEAN_NAME);

the consumer is NOT created and messages are NOT coming through - and that IOException occurs - how can I fix that?

EDIT: I think the issue is that my rabbit is working only over SSL connection, so I tried the following:

    <rabbit:connection-factory
        id="defaultConnectionFactory"
        channel-cache-size="5"
        addresses="${addresses}"
        password="${password}"
        username="${username}"
        connection-factory="sslConnectionFactory"/>
    <bean id="sslConnectionFactory" class="com.sheker.MySSLConnectionFactory">
        <constructor-arg>
            <value>${useSsl}</value>
        </constructor-arg>
         <constructor-arg>
            <value>${keystore}</value>
        </constructor-arg>
        <constructor-arg>
            <value>${cert}</value>
        </constructor-arg>
        <beans:property name="requestedHeartbeat" value="60"/>
    </bean>
import com.rabbitmq.client.ConnectionFactory;

public class MySSLConnectionFactory extends ConnectionFactory {

    public SSLConnectionFactory(final boolean useSsl, final String keystore, final String cert) {
        if (useSsl) {
            useSslProtocol(new HttpUtil(keystore, cert).createSslContext());
        }
    }
}
        String connectionStr = "rabbitmq:sheker?"
                +"queue=%s"
                +"&autoDelete=false"
                +"&concurrentConsumers=%d"
                +"&connectionFactory=#defaultConnectionFactory";

but I get even more exceptions:

{"filename":"RabbitMQConsumer.java","lineno":"222","stacktrace":"java.net.ConnectException: Connection refused (Connection refused)\n\tat java.net.PlainSocketImpl.socketConnect(Native Method)\n\tat java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)\n\tat java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)\n\tat java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)\n\tat java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)\n\tat java.net.Socket.connect(Socket.java:589)\n\tat com.rabbitmq.client.impl.SocketFrameHandlerFactory.create(SocketFrameHandlerFactory.java:60)\n\tat com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:62)\n\tat com.rabbitmq.client.impl.recovery.AutorecoveringConnection.init(AutorecoveringConnection.java:99)\n\tat com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:944)\n\tat com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:903)\n\tat com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:861)\n\tat com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1044)\n\tat org.apache.camel.component.rabbitmq.RabbitMQEndpoint.connect(RabbitMQEndpoint.java:231)\n\tat org.apache.camel.component.rabbitmq.RabbitMQConsumer.openConnection(RabbitMQConsumer.java:64)\n\tat org.apache.camel.component.rabbitmq.RabbitMQConsumer.getConnection(RabbitMQConsumer.java:73)\n\tat org.apache.camel.component.rabbitmq.RabbitConsumer.reconnect(RabbitConsumer.java:311)\n\tat org.apache.camel.component.rabbitmq.RabbitMQConsumer$StartConsumerCallable.call(RabbitMQConsumer.java:218)\n\tat org.apache.camel.component.rabbitmq.RabbitMQConsumer$StartConsumerCallable.call(RabbitMQConsumer.java:198)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat java.lang.Thread.run(Thread.java:748)","level":"INFO","exception_class":"java.net.ConnectException","logger_name":"org.apache.camel.component.rabbitmq.RabbitMQConsumer","thread":"Camel (camel) thread #5 - RabbitMQConsumer","message":"Connection failed, will retry in 5000ms","timestamp":"2020-11-24 15:52:30,674","exception_message":"Connection refused (Connection refused)"}

0

There are 0 best solutions below