首页 > 解决方案 > ActiveMQ - Java - 如何一次接收多条消息?

问题描述

您好我已使用以下代码成功设置了消息侦听器:

消息订阅者.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();
  }
}

消息接收器.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 不再是 Spring Boot bean 并且每次都被实例化,仍然是同样的问题。

标签: javaspringspring-bootactivemqmessagebroker

解决方案


推荐阅读