Search code examples
rabbitmqspring-cloud-stream

Create RabbitMQ queue using spring cloud stream without a consumer or without an active consumer


Is there a way to create a RabbitMQ queue using spring cloud stream without having a consumer for the queue.

Our scenario is that we want to use the delay messaging strategy, so messages coming to the first queue would be held until expired and moved to a DLQ. The application would be consuming the messages from the DLQ.

Wanted to check if there is a way we can use spring cloud stream to configure the queues, when we do not have a consumer for the first queue and it's just there to hold messages till expiry.


Solution

  • Yes; simply add a Queue bean (and binding if needed).

    Boot auto configures a RabbitAdmin which will detect such beans when the connection is first established.

    https://docs.spring.io/spring-amqp/docs/current/reference/html/#broker-configuration

    @Bean
    public Queue queue() {
        return QueueBuilder.nonDurable("foo")
            .autoDelete()
            .exclusive()
            .withArgument("foo", "bar")
            .build();
    }