不,您不應在發佈消息時設置JMSRedelivered
屬性。消息傳遞提供程序在多次傳遞消息時將設置此屬性。
根據JMS規範
如果客戶收到與JMSRedelivered指標集的消息,這是有可能的,但不能保證,這個消息已被傳遞,但在過去沒有得到確認。通常,提供者在重新傳遞消息時必須設置消息的JMSRedelivered消息頭字段。如果該字段設置爲true,則表明該消息應用程序可能已經傳遞了該消息,並且該應用程序應該採取額外的預防措施以防止重複處理。
該標題字段在發送時沒有意義,並且由 發送方法保持未分配狀態。
仔細閱讀最後一行,它說JMSRedelivered
具有no
意思是什麼時候發送消息。
在你的情況下,由於消息有不被交還時,getJMSRedelivered
屬性調用返回FALSE
。
更新
示例代碼來測試JMSRedelivered
財產。
// Create JMS objects
connection = cf.createConnection();
System.out.println("Created connection to " + queueManager);
// Create a transacted session.
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
System.out.println("Session created");
Destination topicScore = session.createTopic("/SCORE");
MessageConsumer consScore = session.createConsumer(topicScore);
JMSBytesMessage msg=null;
// Receive message first
msg = (JMSBytesMessage) colesConsumer.receiveNoWait();
System.out.println(msg.getJMSRedelivered);
// Rollback the previous receive, to force messaging provider to redeliver the message
session.rollback();
// receive message again
msg = (JMSBytesMessage) colesConsumer.receiveNoWait();
// This time JMSRedelivered will be true.
System.out.println(msg.getJMSRedelivered);
希望這對你有幫助。
因此,如果我再次重新發送相同的消息,並將此標誌消耗後設置爲真正的.....它應該工作? – anon
它是需要重新傳遞郵件的郵件提供程序,而不是您的發件人應用程序。在上面的更新中查看代碼片段。 – Shashi