italktothewind
italktothewind

Reputation: 2196

Spring - Rabbit template - Bulk operation

Anyone knows if it is possible to send a collection of messages to a queue using Rabbit template?

Obviously I can send them one at a time, but I want to do it in a single bulk operation (to gain performance).

Thanks!

Upvotes: 4

Views: 2837

Answers (2)

Aniket Sahrawat
Aniket Sahrawat

Reputation: 12937

You can create a bean of BatchingRabbitTemplate and use it. Here is a working example bean:

@Bean
public BatchingRabbitTemplate batchingRabbitTemplate(ConnectionFactory connectionFactory) {
    BatchingStrategy strategy = new SimpleBatchingStrategy(500, 25_000, 3_000);
    TaskScheduler scheduler = new ConcurrentTaskScheduler();
    BatchingRabbitTemplate template = new BatchingRabbitTemplate(strategy, scheduler);
    template.setConnectionFactory(connectionFactory);
    // ... other settings
    return template;
}

Now you can inject BatchingRabbitTemplate in another bean and use it:

@Bean
public ApplicationRunner runner(BatchingRabbitTemplate template) {
    MessageProperties props = //...
    return args -> template.send(new Message("Test").getBytes(), props);
}

Upvotes: 6

Artem Bilan
Artem Bilan

Reputation: 121560

See Reference Manual about batching support:

Starting with version 1.4.2, the BatchingRabbitTemplate has been introduced. This is a subclass of RabbitTemplate with an overridden send method that batches messages according to the BatchingStrategy; only when a batch is complete is the message sent to RabbitMQ.

Upvotes: 3

Related Questions