ActiveMQ-Java-如何一次接收多封邮件?

时间:2019-10-03 10:05:11

标签: java spring spring-boot activemq messagebroker

嗨,我已经使用以下代码成功设置了消息侦听器:

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分钟。

编辑:我应该说我正在使用Spring Boot,因此为什么要自动连接MessageReceiver。这意味着它本质上是一个单例,这可能是问题吗?是否可以使用ActiveMQ满足我的需求的另一种方式?

编辑2:MessageReceiver不再是Spring Boot Bean,并且每次都实例化,仍然是相同的问题。

0 个答案:

没有答案