Spring AMQP пакетного получения сообщений
Мы используем Spring AMQP для чтения сообщений из RabbitMQ, сейчас мы читаем только одно сообщение за раз из очереди. Могу ли я прочитать несколько сообщений из очереди, а затем обработать пакет?
Я вижу, что есть BatchingStrategy, доступный в Spring, как я могу подключить его в 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);
...
public class Processor implements IChannelProcessor {
@Override
public void process(Message message) {
validateMessageEvent(message);
// process the message
1 ответ
BatchingStrategy
для помещения нескольких сегментов сообщения в одно сообщение amqp; контейнер автоматически отправляет такие сообщения. Это не поможет в ваших целях.
Делать что хочешь; вместо использования сообщений POJO (@RabbitListener
) вы должны использовать контейнер слушателя сообщений с acknowledgeMode
установлен в MANUAL
с ChannelAwareMessageListener
,
Когда вы обработали свою партию сообщений, позвоните basicAck
на канале для подтверждения всех сообщений в пакете.