ActiveMQ-Java-如何一次接收多条消息?
您好,我已使用以下代码成功设置了消息侦听器: MessageSubscriber.javaActiveMQ-Java-如何一次接收多条消息?,java,spring,spring-boot,activemq,messagebroker,Java,Spring,Spring Boot,Activemq,Messagebroker,您好,我已使用以下代码成功设置了消息侦听器: MessageSubscriber.java public class MessageSubscriber { @Autowired MessageReceiver callback; public void subscribe(String topicName) throws JMSException { final ActiveMQConnectionFactory connectionFactory =
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条消息进入,我会看到“Receiving message!”日志,30-40秒就会过去,直到它得到响应。只有在处理完成时,我才能看到下一个“接收消息!”日志。这意味着5条消息大约需要3分钟,而不是不到1分钟
编辑:我应该说我使用的是spring boot,因此MessageReceiver是自动连接的。这意味着它本质上是一个单身汉,这可能是问题所在吗?是否有另一种使用ActiveMQ的方法可以满足我的需要
编辑2:MessageReceiver不再是一个spring引导bean,每次都被实例化,仍然是同一个问题。我不确定这一点,但这可能会有所帮助,所以您希望消息侦听器同时使用和处理消息?在问题中,它提到了如何配置它(尽管问题是关于一些不同的东西)@fctmolina好的,这是有用的信息。因此,如果我有3个单独的会话/线程订阅同一主题,我可以一次收到总共3条消息。这在一定程度上解决了这个问题,但我希望我能够在单独的会话中接收消息并处理它。因此,我不局限于我最初创建的会话数量,然后我可以在特定时间超过该阈值。看起来我需要做一些研究,但这是一个很好的起点。Thanks@AdrianShum谢谢你的链接,看起来很有希望。我将需要刷我的Java技能,以完成这个哈哈。我将更新我的进度,但可能需要一些时间。