0
0
SpringbootHow-ToBeginner · 4 min read

How to Use Spring AMQP: Simple Guide with Example

To use Spring AMQP, add the spring-boot-starter-amqp dependency, configure a RabbitTemplate to send messages, and use @RabbitListener to receive messages. Spring AMQP simplifies working with RabbitMQ by handling connection and message conversion automatically.
📐

Syntax

Spring AMQP uses these main parts:

  • RabbitTemplate: Sends messages to exchanges or queues.
  • @RabbitListener: Listens for messages on queues.
  • ConnectionFactory: Manages connection to RabbitMQ server.
  • Queue, Exchange, Binding: Define messaging topology.

You configure these as beans in your Spring application.

java
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitConfig {

    @Bean
    public Queue myQueue() {
        return new Queue("myQueue", false);
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        return new RabbitTemplate(connectionFactory);
    }

    @RabbitListener(queues = "myQueue")
    public void listen(String message) {
        System.out.println("Received: " + message);
    }
}
💻

Example

This example shows how to send a message to a queue and receive it using Spring AMQP.

java
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.annotation.RabbitListener;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class SpringAmqpExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringAmqpExampleApplication.class, args);
    }

    @Bean
    public Queue exampleQueue() {
        return new Queue("exampleQueue", false);
    }

    @Bean
    public CommandLineRunner runner(RabbitTemplate rabbitTemplate) {
        return args -> {
            System.out.println("Sending message...");
            rabbitTemplate.convertAndSend("exampleQueue", "Hello from Spring AMQP!");
        };
    }

    @RabbitListener(queues = "exampleQueue")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}
Output
Sending message... Received message: Hello from Spring AMQP!
⚠️

Common Pitfalls

Common mistakes when using Spring AMQP include:

  • Not defining the queue or exchange before sending messages, causing errors.
  • Forgetting to enable @RabbitListener by missing @EnableRabbit annotation.
  • Using mismatched queue names between sender and listener.
  • Not configuring connection properties correctly, leading to connection failures.

Always verify your RabbitMQ server is running and accessible.

java
/* Wrong: Missing @EnableRabbit annotation - listener won't work */

// Correct usage:
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableRabbit
public class RabbitConfig {
    // beans here
}
📊

Quick Reference

Here is a quick summary of key Spring AMQP components:

ComponentPurpose
RabbitTemplateSend messages to RabbitMQ queues or exchanges
@RabbitListenerMethod annotation to receive messages from queues
QueueDefines a queue in RabbitMQ
ExchangeDefines how messages are routed
BindingConnects queues to exchanges with routing keys
ConnectionFactoryManages connection to RabbitMQ server

Key Takeaways

Add spring-boot-starter-amqp dependency to your project to start using Spring AMQP.
Use RabbitTemplate to send messages and @RabbitListener to receive them.
Always define queues and enable @EnableRabbit to activate listeners.
Match queue names exactly between sender and listener to avoid message loss.
Check RabbitMQ server connection settings to prevent connection errors.