2015-10-07 2 views
3

Мы используем Spring AMQP для чтения сообщения от RabbitMQ, прямо сейчас мы читаем только одно сообщение в очереди с очереди, есть ли в любом случае я могу читать несколько сообщений из очереди, а затем обрабатывать пакет?Весна amqp batch получение сообщений

Я вижу, что существует весомая функция BatchingStrategy, как я могу подключить ее к соединениюFactory?

вот мой код:

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 

ответ

2

BatchingStrategy для ввода нескольких сегментов сообщений в одном AMQP сообщении; контейнер автоматически дезактивирует такие сообщения. Это не поможет в ваших целях.

Чтобы делать то, что вы хотите; вместо использования POJO-сообщений (@RabbitListener) вам нужно будет использовать контейнер прослушивателя сообщений с acknowledgeMode, установленным на MANUAL с ChannelAwareMessageListener.

Когда вы обработали свою партию сообщений, позвоните basicAck по каналу, чтобы получить все сообщения в пакете.

Смежные вопросы