私のアプリケーションはJboss7.1.1で実行されています。1分ごとに実行されるスケジューラーがあり、DLQにメッセージがあるかどうかを確認し、DBでいくつかの更新を行う必要があります。
事前定義されたカスタム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);
}
メッセージを消費するコードは次のとおりです(1分ごとに実行されます)。
/*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();
}
デバッグモードを使用しましたが、コンシューマーの宛先プロパティが正しいキューに設定されていることがわかります。何が間違っているのでしょうか。