我試圖從隊列中接收消息,如link中所述。 該隊列可能包含多個消息。我想一次讀完。當隊列中沒有消息時,jms接收方法不會停止
問題:
我用下面的方式給出。但是當3分鐘(180000毫秒)後隊列中沒有消息時,我無法看到控制權傳遞給while循環中的其他部分。
因爲我不能夠達到最後的阻止湯姆停止連接。
如在link中給出的那樣,當沒有消息時,我應該接收消息流結束控制消息。但我沒有明白。
由於內部while循環是沒有得到excecuted這個else部分的最後一個塊從入門到達關閉連接
什麼可以是問題?
方法:
import javax.naming.InitialContext;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.QueueSession;
import javax.jms.QueueReceiver;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
public class Receiver
{
@Resource(lookup = "jms/ConnectionFactory")
private static QueueConnectionFactory connectionFactory;
@Resource(lookup = "jms/Queue")
private static Queue queue;
public void readQueueMessages() {
try {
// create a queue connection
QueueConnection queueConn = connFactory.createQueueConnection();
// create a queue session
QueueSession queueSession = queueConn.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
// create a queue receiver
QueueReceiver queueReceiver = queueSession.createReceiver(queue);
// start the connection
queueConn.start();
// receive a message
while(true) {
TextMessage message = (TextMessage) queueReceiver.receive(180000);
if (message != null) {
if (message instanceof TextMessage) {
/print the message
System.out.println("received: " + message.getText());
} else {
break; // when the end-of-message stream control is message is received, that cannnot be of Textmessage type. So the loop should terminate.
}
}
}
} catch(JMSException exp) {
// Handle this exception
} finally {
if(queueConn != null) {
// close the queue connection
queueConn.close();
}
}
我們是否應該在while循環或out side while循環中調用session.comiit()?因爲我通過compcode'2'('MQCC_FAILED')原因'2024'('MQRC_SYNCPOINT_LIMIT_REACHED')收回錯誤WebSphere MQ調用失敗閱讀消息。 –