Coding a Consumer
Learn how to write a RabbitMQ consumer.
We'll cover the following...
Writing a RabbitMQ consumer
With the producer nicely defined in a WebFlux controller, it’s time to switch gears and focus on writing a RabbitMQ consumer. Spring AMQP actually has multiple options. The absolute simplest approach available is to use AmqpTemplate.receive(queueName)
. It’s probably not the best solution, though, especially for high-volume environments.
@Service //1public class SpringAmqpItemService {private static final Logger log =LoggerFactory.getLogger(SpringAmqpItemService.class);private final ItemRepository repository; //2public SpringAmqpItemService(ItemRepository repository) {this.repository = repository;}}
Here’s a breakdown of the code above:
-
In line 1,
@Service
ensures that an instance of this class is created when launched. -
In line 7, the
ItemRepository
is injected through constructor injection.
There’s also a Logger
, which we’ll soon put to good use. But first, it’s time to configure what’s probably the most convenient way to listen for RabbitMQ messages using Spring AMQP:
@RabbitListener( //1ackMode = "MANUAL",bindings = @QueueBinding( //2value = @Queue, //3exchange = @Exchange("hacking-spring-boot"), //4key = "new-items-spring-amqp")) //5public Mono<Void> processNewItemsViaSpringAmqp(Item item) { //6log.debug("Consuming => " + item);return this.repository.save(item).then(); //7}
Here’s a breakdown of the code above:
- In line 1,
@RabbitListener
informs Spring AMQP to configure a message listener, ready to consume messages. - In line 3,
@QueueBinding
shows how to bind a queue to an exchange. - In line 4,
@Queue
by itself creates a random,