You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (JIRA)" <ji...@apache.org> on 2018/02/02 09:03:00 UTC

[jira] [Updated] (CAMEL-11530) RabbitMQ component doesn't handle network failure properly when using autoAck=false and automaticRecovery=true

     [ https://issues.apache.org/jira/browse/CAMEL-11530?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Claus Ibsen updated CAMEL-11530:
--------------------------------
    Fix Version/s: 2.21.0

> RabbitMQ component doesn't handle network failure properly when using autoAck=false and automaticRecovery=true
> --------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-11530
>                 URL: https://issues.apache.org/jira/browse/CAMEL-11530
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-rabbitmq
>    Affects Versions: 2.17.6
>         Environment: RabbitMQ 3.5.7
>            Reporter: Arnaud CHOTARD
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 2.21.0
>
>         Attachments: channel.png, connections.png, jmx.png, queue.png
>
>
> When using autoAck=false and automaticRecoveryEnabled=true on Camel RabbitMQ consumer, we are facing problem during network failure recovery on our production environments.
> Before CAMEL-8742, tested with Camel 2.16.2, the automatic recovery is managed directly by RabbitMQ native client. When network failure is recovering, the old channel is reconnect and messages are proccessed correctly. 
> After CAMEL-8742, tested with Camel 2.17.6, the Camel RabbitMQ component open new channel when network failure is recovering. On the other hand, RabbitMQ native client will also reconnect old channels when using automaticRecoveryEnabled=true. So two channel are now open. The two recovery method make conflict. As consequence, new messages publish in RabbitMQ remain unacked and the Camel exchange are not processing on Camel route. 
> To recover from this, we should delete, recreate the queue in production environment and restart Camel application. So, the unacked messages are being lost.
> What do you think of this problem ?
> Thank you
> Camel RabbitMQ Consumer Route :
> {code:java}
> from("rabbitmq:///?" + 
> 		"connectionFactory=#brokerConnectionFactory" + 
> 		"&addresses=" + brokerAdresses + 
> 		"&queue="+ brokerQueue +
> 		"&declare=false" + 
> 		"&autoDelete=false" +
> 		"&autoAck=false"
> 	)
> 	.bean("<beanName>", "<beanMethod>");
> {code}
> RabbitMQ Connection Factory with automaticRecoveryEnabled=true
> {code}
>     <bean id="brokerConnectionFactory" class="com.rabbitmq.client.ConnectionFactory">
>         <property name="host" value="${broker.hostname}"/>
>         <property name="virtualHost" value="${broker.virtualHost:/}"/>
>         <property name="port" value="${broker.port:5672}"/>
>         <property name="username" value="${broker.username}"/>
>         <property name="password" value="${broker.password}"/>
>         <property name="automaticRecoveryEnabled" value="true"/>
>     </bean>
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)