Spring amqp批量接收消息

use*_*587 5 rabbitmq spring-amqp

我们使用 Spring AMQP 从 RabbitMQ 读取消息,现在我们一次只能从队列中读取一条消息,我是否可以从队列中读取多条消息然后处理批处理?

我看到 Spring 中有一个 BatchingStrategy 可用,我如何将其插入到 connectionFactory 中?

这是我的代码:

CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host, port);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);

SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        JsonMessageConverter converter = new JsonMessageConverter();
        DefaultClassMapper defaultClassMapper = new DefaultClassMapper();
        defaultClassMapper.setDefaultType(Message.class);
        converter.setClassMapper(defaultClassMapper);
        factory.setMessageConverter(converter);
        factory.setConcurrentConsumers(3);
Run Code Online (Sandbox Code Playgroud)

...

public class Processor implements IChannelProcessor {
@Override
    public void process(Message message) {
        validateMessageEvent(message);
        // process the message
Run Code Online (Sandbox Code Playgroud)

Gar*_*ell 5

用于BatchingStrategy将多个消息段放入单个 amqp 消息中;容器会自动分批此类消息。它对你的目的没有帮助。

做你想做的事;您必须使用带有设置为 的@RabbitListener消息侦听器容器,而不是使用 POJO 消息传递 ( ) 。acknowledgeModeMANUALChannelAwareMessageListener

处理完一批消息后,调用basicAck通道以确认该批次中的所有消息。