嗨,我已经使用以下代码成功设置了消息侦听器:
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,并且每次都实例化,仍然是相同的问题。