У меня есть подписчик, который собирает сообщения, пока не достигнет указанного предела, а затем передает собранные сообщения процессору для выполнения некоторых операций.Код работает нормально, проблема в том, что абонент ждет, пока не соберет указанное количество сообщений.Если у нас меньше сообщений, управление программой не будет передано процессору.
Например, допустим, мой размер чанка равен 100, а если у меня 100 или несколько из 100 сообщений, программа работает нормально. Но если у меня есть сообщения <100 или150 некоторые сообщения читаются подписчиком, но они никогда не передаются процессору.Есть ли способ выяснить, что очередь пуста, используя шаблон кролика, чтобы я мог проверить это условие и разорвать цикл </p>
@RabbitListener(id="messageListener",queues = "#{rabbitMqConfig.getSubscriberQueueName()}",containerFactory="queueListenerContainer")
public void receiveMessage(Message message, Channel channel, @Header("id") String messageId,
@Header("amqp_deliveryTag") Long deliveryTag) {
LOGGER.info(" Message:"+ message.toString());
if(messageList.size() < appConfig.getSubscriberChunkSize() ) {
messageList.add(message);
deliveryTagList.add(deliveryTag);
if(messageList.size() == appConfig.getSubscriberChunkSize()) {
LOGGER.info("------------- Calling Message processor --------------");
Message [] messageArry = new Message[messageList.size()];
messageArry = messageList.toArray(messageArry);
LOGGER.info("message Array Length: "+messageArry.length);
messageProcessor.process(messageArry);
messageList = new ArrayList<Message>(Arrays.asList(messageArry));
LOGGER.info("message Array to List conversion Size: "+messageList.size());
LOGGER.info("-------------- Completed Message processor -----------");
eppQ2Publisher.sendMessages(messageList, channel, deliveryTagList);
messageList.clear();
deliveryTagList.clear();
}
} else {
// do nothing..
}