Мое приложение работает на Jboss 7.1.1. У меня есть планировщик, который запускается каждую минуту, и вам нужно проверить, есть ли сообщения в DLQ и какие-то обновления в БД.MessageConsumer не принимает сообщений
Я написал потребителю сообщения, который слушает предопределенный пользовательский DLQ. Проблема в том, что я вижу, что есть сообщения в пользовательском DLQ, но consumer.receiveNoWait()
всегда возвращает null.
Вот код для создания потребителя:
/*this is running fine and creating the consumer*/
public DestinationHandlerImpl(ConnectionFactory connectionFactory,
Destination destination, boolean useTransaction, int delMode,
boolean isProducer) throws JMSException {
connection = connectionFactory.createConnection();
consumer = session.createConsumer(destination);
}
Вот код, который потребляет сообщение (работает каждую минуту):
/*this always return null, event when there are messages in the queue*/
public <T extends BaseEvent> T recieveMessage()
throws JMSException {
Message message = consumer.receiveNoWait(); // ----> always return null!!!
if (message != null && !(message instanceof ObjectMessage)) {
throw new IllegalArgumentException(
"message object has to be of type ObjectMessage");
}
// Extract the object from the message
return message == null ? null : (T) ((ObjectMessage) message).getObject();
}
Я использовал режим отладки, и я может видеть, что свойство потребительского назначения установлено в правильную очередь, так что я делаю неправильно?
Я ожидаю, что вы не хотите продолжать вызов 'start()' каждую минуту, но вы должны позвонить ему один раз, когда вы впервые откроете соединение. – seh
Я не забудьте закрыть соединение при каждом запуске планировщика. – Tomer
Могу я спросить, почему? Вы обеспокоены потреблением ресурсов открытого соединения? – seh