[
https://issues.apache.org/jira/browse/CAMEL-16707?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-16707.
---------------------------------
Resolution: Fixed
> camel-rabbitmq connection leak on error during 'declare'
> --------------------------------------------------------
>
> Key: CAMEL-16707
> URL: https://issues.apache.org/jira/browse/CAMEL-16707
> Project: Camel
> Issue Type: Bug
> Components: camel-rabbitmq
> Affects Versions: 3.6.0
> Reporter: Rastislav Papp
> Priority: Minor
> Fix For: 3.11.0
>
>
> camel-rabbitmq component causes a connection leak when there is an error
> during declaration of exchanges/queues (e.g. when an exchange with the same
> name but different type already exists).
> Problem lies in {{org.apache.camel.component.rabbitmq.RabbitConsumer}}:
> {code:java}
> RabbitConsumer(RabbitMQConsumer consumer) {
> // super(channel);
> this.consumer = consumer;
> try {
> Connection conn = consumer.getConnection();
> this.channel = openChannel(conn);
> } catch (IOException | TimeoutException e) {
> LOG.warn("Unable to open channel for RabbitMQConsumer. Continuing
> and will try again", e);
> }
> }
> //...
> private Channel openChannel(Connection conn) throws IOException {
> Channel channel = //... channel gets created
> //...
> if (consumer.getEndpoint().isDeclare()) {
> consumer.getEndpoint().declareExchangeAndQueue(channel);
> }
> return channel;
> }
> {code}
> if {{declareExchangeAndQueue}} gets called, and if it throws an exception
> (e.g. because the exchange is already declared with different configuration)
> the exception is caught and consumed in the constructor, and the channel is
> never closed. I think the exception should be propagated in this case,
> because it is not recoverable (or at least there should be an option for
> this). It would also cause the app startup to fail, which would be a good
> thing in this case.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)