Michael Weiss created CAMEL-24173:
-------------------------------------

             Summary: camel-spring-rabbitmq: Cannot connect to latest rabbitmq 
server due to deprecated feature
                 Key: CAMEL-24173
                 URL: https://issues.apache.org/jira/browse/CAMEL-24173
             Project: Camel
          Issue Type: Improvement
          Components: camel-spring-rabbitmq
    Affects Versions: 4.21.0, 4.18.0
            Reporter: Michael Weiss


I usually use `autoDeclare: true` when connecting to RabbitMQ. Example:
{code:yaml}
- route:     id: route-8723
    from:       id: from-3034
      uri: spring-rabbitmq
      parameters:         autoDeclare: true
        deadLetterExchange: CamelPlayground.RabbitMqDemo.deadletter
        deadLetterQueue: CamelPlayground.RabbitMqDemo.OffRamp.deadletter
        deadLetterRoutingKey: OffRamp
        exchangeName: CamelPlayground.RabbitMqDemo
        queues: CamelPlayground.RabbitMqDemo.OffRamp
        routingKey: OffRamp
      steps:         - log:             id: log-3784
            message: ${body}
{code}
 

It seems Camel uses a deprecated feature called 
`{{{}transient_nonexcl_queues{}}}` which was removed from rabbitmq server in 
4.3.0. According to AI this is because Camel by default sets 
{{arg.queue.durable=false}} which does not seem to be possible due to this 
removed feature anymore. Shouldn't we set {{arg.queue.durable=true}} by default?

Error log:
{noformat}
2026-07-16 11:53:08.815  INFO 334 --- [           main] 
org.apache.camel.main.MainSupport        : Apache Camel (JBang) 4.21.0 is 
starting
2026-07-16 11:53:08.943  INFO 334 --- [           main] 
org.apache.camel.main.MainSupport        : Running Linux 6.8.0-134-generic 
(amd64)
2026-07-16 11:53:08.943  INFO 334 --- [           main] 
org.apache.camel.main.MainSupport        : Using Java 21.0.10 (OpenJDK 64-Bit 
Server VM) with PID 334
2026-07-16 11:53:08.943  INFO 334 --- [           main] 
org.apache.camel.main.MainSupport        : Started by ubuntu in 
/home/ubuntu/integrations
2026-07-16 11:53:13.635  INFO 334 --- [           main] 
.main.download.MavenDependencyDownloader : Downloaded: 
org.apache.camel:camel-kubernetes:4.21.0 (took: 4s687ms) from: 
central@https://repo1.maven.org/maven2
2026-07-16 11:53:13.702  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    : Properties location: 
file:./application-dev.properties,file:./application.properties
2026-07-16 11:53:14.943  INFO 334 --- [           main] 
.main.download.MavenDependencyDownloader : Downloaded: 
org.apache.camel:camel-spring-rabbitmq:4.21.0 (took: 1s164ms) from: 
central@https://repo1.maven.org/maven2
2026-07-16 11:53:15.170  INFO 334 --- [           main] 
rnetes.properties.BasePropertiesFunction : KubernetesClient using masterUrl: 
https://10.96.0.1:443/ with namespace: camel-dev
2026-07-16 11:53:15.370  INFO 334 --- [           main] 
org.apache.camel.main.ProfileConfigurer  : The application is starting with 
profile: dev
2026-07-16 11:53:17.444  INFO 334 --- [           main] 
.main.download.MavenDependencyDownloader : Downloaded: 
org.apache.camel:camel-micrometer-prometheus:4.21.0 (took: 2s52ms) from: 
central@https://repo1.maven.org/maven2
2026-07-16 11:53:17.506  INFO 334 --- [           main] 
crometer.prometheus.MicrometerPrometheus : Registered 3 MeterBinders: 
ProcessorMetrics, JvmInfoMetrics, FileDescriptorMetrics
2026-07-16 11:53:17.528  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    : Auto-configuration summary
2026-07-16 11:53:17.528  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    :     [application-dev.properties]   
camel.main.name = route
2026-07-16 11:53:17.528  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    :     [application-dev.properties]   
camel.management.metricsEnabled = true
2026-07-16 11:53:17.528  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    :     [application-dev.properties]   
camel.management.enabled = true
2026-07-16 11:53:17.529  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    :     [application-dev.properties]   
camel.metrics.enabled = true
2026-07-16 11:53:17.529  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    :     [application-dev.properties]   
camel.metrics.enableMessageHistory = true
2026-07-16 11:53:17.529  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    :     [application-dev.properties]   
camel.metrics.binders = processor,jvm-info,file-descriptor
2026-07-16 11:53:17.529  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    :     [application-dev.properties]   
camel.trace.enabled = false
2026-07-16 11:53:17.529  INFO 334 --- [           main] 
org.apache.camel.main.BaseMainSupport    :     [application-dev.properties]   
camel.trace.standby = false
2026-07-16 11:53:17.672  INFO 334 --- [           main] 
he.camel.cli.connector.LocalCliConnector : Camel CLI connector enabled
2026-07-16 11:53:17.696  INFO 334 --- [           main] 
e.camel.support.LifecycleStrategySupport : Autowired property: 
connectionFactory on component: spring-rabbitmq as exactly one instance of 
type: org.springframework.amqp.rabbit.connection.ConnectionFactory 
(org.springframework.amqp.rabbit.connection.CachingConnectionFactory) found in 
the registry
2026-07-16 11:53:17.748  INFO 334 --- [           main] 
e.camel.impl.engine.AbstractCamelContext : Apache Camel 4.21.0 (route) is 
starting
2026-07-16 11:53:17.805  INFO 334 --- [           main] 
vertx.core.spi.resolver.ResolverProvider : Using the default address resolver 
as the dns resolver could not be loaded
2026-07-16 11:53:17.820  INFO 334 --- [ntloop-thread-0] 
tform.http.vertx.VertxPlatformHttpServer : Vert.x HttpServer started on 
0.0.0.0:8080
2026-07-16 11:53:17.827  INFO 334 --- [           main] 
crometer.prometheus.MicrometerPrometheus : MicrometerPrometheus enabled with 
HTTP scraping on management port 8080 on path /observe/metrics
2026-07-16 11:53:17.849  INFO 334 --- [           main] 
bbit.connection.CachingConnectionFactory : Attempting to connect to: 
rabbitmq:5672
2026-07-16 11:53:17.875  INFO 334 --- [           main] 
bbit.connection.CachingConnectionFactory : Created new connection: 
SpringAMQP#6885ed19:0/SimpleConnection@641bc9a8 
[delegate=amqp://[email protected]:5672/, localPort=54780]
2026-07-16 11:53:17.902  INFO 334 --- [           main] 
nent.springrabbit.SpringRabbitMQEndpoint : Auto-declaring durable 
DeadLetterExchange: CamelPlayground.RabbitMqDemo.deadletter routingKey: OffRamp
2026-07-16 11:53:17.903  INFO 334 --- [           main] 
nent.springrabbit.SpringRabbitMQEndpoint : Auto-declaring a non-durable, 
auto-delete, or exclusive Queue 
(CamelPlayground.RabbitMqDemo.OffRamp)durable:false, auto-delete:false, 
exclusive:false. It will be redeclared if the broker stops and is restarted 
while the connection factory is alive, but all messages will be lost.
2026-07-16 11:53:17.906  INFO 334 --- [           main] 
bbit.connection.CachingConnectionFactory : Attempting to connect to: 
rabbitmq:5672
2026-07-16 11:53:17.907  WARN 334 --- [99.114.190:5672] 
mq.client.impl.ForgivingExceptionHandler : An unexpected connection driver 
error occurred (Exception message: Connection reset)
2026-07-16 11:53:17.910  INFO 334 --- [           main] 
bbit.connection.CachingConnectionFactory : Created new connection: 
SpringAMQP#6885ed19:1/SimpleConnection@7646c9f5 
[delegate=amqp://[email protected]:5672/, localPort=54792]
2026-07-16 11:53:17.912 ERROR 334 --- [           main] 
e.camel.impl.engine.AbstractCamelContext : Error starting CamelContext (route) 
due to exception thrown: java.io.IOException
org.springframework.amqp.AmqpIOException: java.io.IOException
        at 
org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:69)
        at 
org.springframework.amqp.rabbit.connection.RabbitAccessor.convertRabbitAccessException(RabbitAccessor.java:117)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2259)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2211)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2191)
        at 
org.springframework.amqp.rabbit.core.RabbitAdmin.declareQueue(RabbitAdmin.java:304)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQEndpoint.declareElements(SpringRabbitMQEndpoint.java:793)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQEndpoint.declareElements(SpringRabbitMQEndpoint.java:691)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQConsumer.prepareAndStartListenerContainer(SpringRabbitMQConsumer.java:152)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQConsumer.doStart(SpringRabbitMQConsumer.java:105)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:132)
        at 
org.apache.camel.support.service.ServiceHelper.startService(ServiceHelper.java:129)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.startService(AbstractCamelContext.java:3608)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:425)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:341)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:217)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.lambda$doStartOrResumeRoutes$0(InternalRouteStartupManager.java:129)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.lambda$startingRoutes$0(AbstractCamelContext.java:1165)
        at 
org.apache.camel.util.concurrent.ContextValueFactory.where(ContextValueFactory.java:65)
        at 
org.apache.camel.util.concurrent.ContextValue.where(ContextValue.java:174)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.startingRoutes(AbstractCamelContext.java:1163)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:117)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:3210)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:2812)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:2767)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:132)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2347)
        at 
org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:214)
        at org.apache.camel.main.KameletMain.doStart(KameletMain.java:413)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:132)
        at 
org.apache.camel.dsl.jbang.core.commands.Run.runKameletMain(Run.java:1945)
        at org.apache.camel.dsl.jbang.core.commands.Run.run(Run.java:1253)
        at org.apache.camel.dsl.jbang.core.commands.Run.doCall(Run.java:365)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelCommand.call(CamelCommand.java:73)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelCommand.call(CamelCommand.java:39)
        at picocli.CommandLine.executeUserObject(CommandLine.java:2031)
        at picocli.CommandLine.access$1500(CommandLine.java:148)
        at 
picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2469)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2461)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2423)
        at 
picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
        at picocli.CommandLine$RunLast.execute(CommandLine.java:2425)
        at picocli.CommandLine.execute(CommandLine.java:2174)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.execute(CamelJBangMain.java:245)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.run(CamelJBangMain.java:86)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.run(CamelJBangMain.java:82)
        at main.CamelJBang.main(CamelJBang.java:37)
Caused by: java.io.IOException
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:140)
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:136)
        at 
com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:158)
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:1013)
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:49)
        at 
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at 
org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:1221)
        at jdk.proxy3/jdk.proxy3.$Proxy68.queueDeclare(Unknown Source)
        at 
org.springframework.amqp.rabbit.core.RabbitAdmin.declareQueues(RabbitAdmin.java:862)
        at 
org.springframework.amqp.rabbit.core.RabbitAdmin.lambda$declareQueue$0(RabbitAdmin.java:305)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.invokeAction(RabbitTemplate.java:2291)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2253)
        ... 44 more
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; 
protocol method: #method<connection.close>(reply-code=541, 
reply-text=INTERNAL_ERROR - Feature `transient_nonexcl_queues` is deprecated.
By default, this feature is not permitted anymore.
The feature will be removed from a future major RabbitMQ version, regardless of 
the configuration; actual version to be determined.
To..., class-id=50, method-id=10)
        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:552)
        at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:316)
        at 
com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:152)
        ... 54 more
2026-07-16 11:53:17.915  INFO 334 --- [           main] 
e.camel.impl.engine.AbstractCamelContext : Apache Camel 4.21.0 (route) is 
shutting down (timeout:10s)
2026-07-16 11:53:17.917  INFO 334 --- [           main] 
e.camel.impl.engine.AbstractCamelContext : Routes stopped (total:1)
2026-07-16 11:53:17.917  INFO 334 --- [           main] 
e.camel.impl.engine.AbstractCamelContext :     Stopped route-8723 
(spring-rabbitmq://CamelPlayground.RabbitMqDemo)
2026-07-16 11:53:17.921  INFO 334 --- [ntloop-thread-0] 
tform.http.vertx.VertxPlatformHttpServer : Vert.x HttpServer stopped
2026-07-16 11:53:17.931  INFO 334 --- [           main] 
e.camel.impl.engine.AbstractCamelContext : Apache Camel 4.21.0 (route) shutdown 
in 16ms (uptime:0s)
2026-07-16 11:53:17.931 ERROR 334 --- [           main] 
org.apache.camel.main.MainSupport        : Error starting Camel: 
org.springframework.amqp.AmqpIOException: java.io.IOException
org.springframework.amqp.AmqpIOException: java.io.IOException
        at 
org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:69)
        at 
org.springframework.amqp.rabbit.connection.RabbitAccessor.convertRabbitAccessException(RabbitAccessor.java:117)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2259)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2211)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2191)
        at 
org.springframework.amqp.rabbit.core.RabbitAdmin.declareQueue(RabbitAdmin.java:304)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQEndpoint.declareElements(SpringRabbitMQEndpoint.java:793)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQEndpoint.declareElements(SpringRabbitMQEndpoint.java:691)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQConsumer.prepareAndStartListenerContainer(SpringRabbitMQConsumer.java:152)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQConsumer.doStart(SpringRabbitMQConsumer.java:105)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:132)
        at 
org.apache.camel.support.service.ServiceHelper.startService(ServiceHelper.java:129)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.startService(AbstractCamelContext.java:3608)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:425)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:341)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:217)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.lambda$doStartOrResumeRoutes$0(InternalRouteStartupManager.java:129)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.lambda$startingRoutes$0(AbstractCamelContext.java:1165)
        at 
org.apache.camel.util.concurrent.ContextValueFactory.where(ContextValueFactory.java:65)
        at 
org.apache.camel.util.concurrent.ContextValue.where(ContextValue.java:174)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.startingRoutes(AbstractCamelContext.java:1163)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:117)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:3210)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:2812)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:2767)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:132)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2347)
        at 
org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:214)
        at org.apache.camel.main.KameletMain.doStart(KameletMain.java:413)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:132)
        at 
org.apache.camel.dsl.jbang.core.commands.Run.runKameletMain(Run.java:1945)
        at org.apache.camel.dsl.jbang.core.commands.Run.run(Run.java:1253)
        at org.apache.camel.dsl.jbang.core.commands.Run.doCall(Run.java:365)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelCommand.call(CamelCommand.java:73)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelCommand.call(CamelCommand.java:39)
        at picocli.CommandLine.executeUserObject(CommandLine.java:2031)
        at picocli.CommandLine.access$1500(CommandLine.java:148)
        at 
picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2469)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2461)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2423)
        at 
picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
        at picocli.CommandLine$RunLast.execute(CommandLine.java:2425)
        at picocli.CommandLine.execute(CommandLine.java:2174)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.execute(CamelJBangMain.java:245)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.run(CamelJBangMain.java:86)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.run(CamelJBangMain.java:82)
        at main.CamelJBang.main(CamelJBang.java:37)
Caused by: java.io.IOException
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:140)
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:136)
        at 
com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:158)
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:1013)
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:49)
        at 
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at 
org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:1221)
        at jdk.proxy3/jdk.proxy3.$Proxy68.queueDeclare(Unknown Source)
        at 
org.springframework.amqp.rabbit.core.RabbitAdmin.declareQueues(RabbitAdmin.java:862)
        at 
org.springframework.amqp.rabbit.core.RabbitAdmin.lambda$declareQueue$0(RabbitAdmin.java:305)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.invokeAction(RabbitTemplate.java:2291)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2253)
        ... 44 more
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; 
protocol method: #method<connection.close>(reply-code=541, 
reply-text=INTERNAL_ERROR - Feature `transient_nonexcl_queues` is deprecated.
By default, this feature is not permitted anymore.
The feature will be removed from a future major RabbitMQ version, regardless of 
the configuration; actual version to be determined.
To..., class-id=50, method-id=10)
        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:552)
        at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:316)
        at 
com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:152)
        ... 54 more
org.springframework.amqp.AmqpIOException: java.io.IOException
        at 
org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:69)
        at 
org.springframework.amqp.rabbit.connection.RabbitAccessor.convertRabbitAccessException(RabbitAccessor.java:117)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2259)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2211)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2191)
        at 
org.springframework.amqp.rabbit.core.RabbitAdmin.declareQueue(RabbitAdmin.java:304)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQEndpoint.declareElements(SpringRabbitMQEndpoint.java:793)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQEndpoint.declareElements(SpringRabbitMQEndpoint.java:691)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQConsumer.prepareAndStartListenerContainer(SpringRabbitMQConsumer.java:152)
        at 
org.apache.camel.component.springrabbit.SpringRabbitMQConsumer.doStart(SpringRabbitMQConsumer.java:105)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:132)
        at 
org.apache.camel.support.service.ServiceHelper.startService(ServiceHelper.java:129)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.startService(AbstractCamelContext.java:3608)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:425)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:341)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:217)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.lambda$doStartOrResumeRoutes$0(InternalRouteStartupManager.java:129)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.lambda$startingRoutes$0(AbstractCamelContext.java:1165)
        at 
org.apache.camel.util.concurrent.ContextValueFactory.where(ContextValueFactory.java:65)
        at 
org.apache.camel.util.concurrent.ContextValue.where(ContextValue.java:174)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.startingRoutes(AbstractCamelContext.java:1163)
        at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:117)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:3210)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:2812)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:2767)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:132)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2347)
        at 
org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:214)
        at org.apache.camel.main.KameletMain.doStart(KameletMain.java:413)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:132)
        at 
org.apache.camel.dsl.jbang.core.commands.Run.runKameletMain(Run.java:1945)
        at org.apache.camel.dsl.jbang.core.commands.Run.run(Run.java:1253)
        at org.apache.camel.dsl.jbang.core.commands.Run.doCall(Run.java:365)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelCommand.call(CamelCommand.java:73)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelCommand.call(CamelCommand.java:39)
        at picocli.CommandLine.executeUserObject(CommandLine.java:2031)
        at picocli.CommandLine.access$1500(CommandLine.java:148)
        at 
picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2469)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2461)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2423)
        at 
picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
        at picocli.CommandLine$RunLast.execute(CommandLine.java:2425)
        at picocli.CommandLine.execute(CommandLine.java:2174)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.execute(CamelJBangMain.java:245)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.run(CamelJBangMain.java:86)
        at 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.run(CamelJBangMain.java:82)
        at main.CamelJBang.main(CamelJBang.java:37)
Caused by: java.io.IOException
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:140)
        at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:136)
        at 
com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:158)
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:1013)
        at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:49)
        at 
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at 
org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:1221)
        at jdk.proxy3/jdk.proxy3.$Proxy68.queueDeclare(Unknown Source)
        at 
org.springframework.amqp.rabbit.core.RabbitAdmin.declareQueues(RabbitAdmin.java:862)
        at 
org.springframework.amqp.rabbit.core.RabbitAdmin.lambda$declareQueue$0(RabbitAdmin.java:305)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.invokeAction(RabbitTemplate.java:2291)
        at 
org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2253)
        ... 44 more
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; 
protocol method: #method<connection.close>(reply-code=541, 
reply-text=INTERNAL_ERROR - Feature `transient_nonexcl_queues` is deprecated.
By default, this feature is not permitted anymore.
The feature will be removed from a future major RabbitMQ version, regardless of 
the configuration; actual version to be determined.
To..., class-id=50, method-id=10)
        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:552)
        at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:316)
        at 
com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:152)
        ... 54 more
{noformat}
AI analysis of the issue:

You're absolutely right. Let me break down exactly what's happening and how to 
fix it.

## Root Cause

Your analysis is correct. The error is crystal clear in the stack trace:

```
com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: 
#method<connection.close>(reply-code=541, reply-text=INTERNAL_ERROR - 
Feature `transient_nonexcl_queues` is deprecated.
By default, this feature is not permitted anymore.
```

**Starting from RabbitMQ 4.3.0**, the `transient_nonexcl_queues` deprecated 
feature was moved from `permitted_by_default` to **`denied_by_default`**. The 
queue your Camel consumer is trying to declare is:

```
Queue(CamelPlayground.RabbitMqDemo.OffRamp) durable:false, auto-delete:false, 
exclusive:false
```

This is a **non-durable (transient), non-exclusive** queue — the exact 
combination that RabbitMQ 4.3+ rejects by default.

---

## Two Solutions

### ✅ Solution 1 (Recommended — Client-side fix): Make the queue durable

Change your Camel route to declare the queue as **durable**. In the 
`camel-spring-rabbitmq` component, you can do this via the **`queues`** 
parameter combined with the **`args`** parameter, or by configuring the `Queue` 
bean properly.

If you're using the URI syntax, you can pass the `queue` argument to control 
durability through the `args` parameter:

```
spring-rabbitmq:CamelPlayground.RabbitMqDemo?queues=OffRamp&routingKey=OffRamp&autoDeclare=true&args=#rabbitArgs
```

Or in your Java configuration, define a durable `Queue` bean:

```java
@Bean
public Queue offRampQueue() {
    return new Queue("CamelPlayground.RabbitMqDemo.OffRamp", true); // 
durable=true
}
```

If you're using `application.properties`:

```properties
# Make the queue durable
camel.component.spring-rabbitmq.auto-declare=true
# Spring AMQP Queue bean with durable=true
```

The key insight from the RabbitMQ 4.3.0 release notes:

> *"Use durable queues, transient exclusive queues, or durable queues with a 
> queue TTL instead."*

### ⚠️ Solution 2 (Server-side workaround): Re-enable the deprecated feature

Add this to **`/etc/rabbitmq/rabbitmq.conf`** on **every node** in the cluster, 
then restart each node:

```properties
# Enables deprecated non-durable (transient) non-exclusive queues
# (disabled by default as of RabbitMQ 4.3.0, will be removed in a later 
version).
deprecated_features.permit.transient_nonexcl_queues = true
```

**Important caveats:**
- This must be set on **ALL cluster nodes** and they must all be restarted.
- This feature **will be removed entirely** in a future RabbitMQ major version, 
so this is only a temporary band-aid.
- If you're already on 4.3.x and only some nodes have this setting, the cluster 
will **not** honor it consistently.

---

## Recommendation

**Go with Solution 1** — make the queue durable in your Camel configuration. 
This is the forward-compatible approach. The `transient_nonexcl_queues` feature 
is on a clear deprecation path towards complete removal, so fixing it at the 
client side today will save you from a forced migration later.

The RabbitMQ team recommends:
- ✅ **Durable queues** with optional `x-expires` (queue TTL) for short-lived 
needs
- ✅ **Exclusive queues** (set `exclusive=true`) for single-connection temporary 
queues
- ❌ Avoid non-durable, non-exclusive queues going forward



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to