Привет! Я успешно настроил прослушиватель сообщений, используя следующий код:
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 больше не является компонентом с загрузочной пружиной и создается каждый раз, но проблема остается той же.