ActiveMQ - Java - Как получать несколько сообщений одновременно? - PullRequest
0 голосов
/ 03 октября 2019

Привет! Я успешно настроил прослушиватель сообщений, используя следующий код:

MessageSubscriber.java

public class MessageSubscriber {

  @Autowired
  MessageReceiver callback;

  public void subscribe(String topicName) throws JMSException {
    final ActiveMQConnectionFactory connectionFactory =
        MqHelper.createActiveMQConnectionFactory(activeMQEndpoint,
            activeMQUsername, activeMQPassword);

    receiveMessage(connectionFactory, topicName);
  }

  private void receiveMessage(ActiveMQConnectionFactory connectionFactory, String topicName)
      throws JMSException {
    final Connection consumerConnection = connectionFactory.createConnection();

    final Session consumerSession =
        consumerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    final Destination consumerDestination = consumerSession.createTopic(topicName);

    final MessageConsumer consumer = consumerSession.createConsumer(consumerDestination);

    consumer.setMessageListener(callback);

    consumerConnection.start();
  }
}

MessageReceiver.java

public class MessageReceiver implements MessageListener {

  private static Logger logger = LoggerFactory.getLogger(MessageReceiver.class);

  @Override
  public void onMessage(Message message) {
    logger.info("Receiving message!");
    // ... I handle the message here
  }
}

Когда я работаюсообщение, которое я использую, когда мне нужно получить результат через некоторое время. Обычно это занимает около 30-40 секунд. Это не проблема, проблема в том, что одновременно обрабатывается только одно сообщение.

Например, когда в теме публикуется 5 сообщений, приходит 1 сообщение, и я вижу сообщение "Прием сообщения!"журнал и 30-40 секунд пройдет, пока не получит ответ. Только в тот момент, когда обработка завершена, я вижу следующее "Прием сообщения!"журнал. Это означает, что 5 сообщений будут занимать примерно 3 минуты, а не менее 1 минуты.

Редактировать: я должен сказать, что я использую пружинную загрузку, и поэтому MessageReceiver имеет автоматическую разводку. Это означает, что это по сути синглтон, может ли это быть проблемой? Есть ли другой способ работы с ActiveMQ, который бы удовлетворил мои потребности?

Редактировать 2: MessageReceiver больше не является компонентом с загрузочной пружиной и создается каждый раз, но проблема остается той же.

...