我們使用Websphere MQ8並考慮使用持久主題來實現發佈和訂閱模式。是否有修改持久JMS主題消息的工具?
我們使用的隊列已經和Hermes JMS-Browser糾正錯誤的隊列消息。
我知道您可以使用愛馬仕訂閱主題,但我認爲您無法訪問和修改已針對特定客戶端保留的消息。
所以我想知道 - 當客戶端無法使用特定客戶端應用程序的持久消息時,如何處理問題,例如,因爲郵件格式錯誤?
您是否必須刪除此客戶的未傳送郵件?還是有一些工具可以做到這一點?
我們使用Websphere MQ8並考慮使用持久主題來實現發佈和訂閱模式。是否有修改持久JMS主題消息的工具?
我們使用的隊列已經和Hermes JMS-Browser糾正錯誤的隊列消息。
我知道您可以使用愛馬仕訂閱主題,但我認爲您無法訪問和修改已針對特定客戶端保留的消息。
所以我想知道 - 當客戶端無法使用特定客戶端應用程序的持久消息時,如何處理問題,例如,因爲郵件格式錯誤?
您是否必須刪除此客戶的未傳送郵件?還是有一些工具可以做到這一點?
當客戶端無法使用特定客戶端應用程序的持久消息時,如何處理問題,例如, 因爲消息格式錯誤?
消費應用(客戶端)應該有適當的異常處理 ,它應該扔掉所有的壞/毒藥消息。
是否必須刪除該客戶端的所有未送達的郵件?還是有一些工具可以做到這一點?
的消息將自動被MQ服務器一旦 TTL(存活時間)期滿被刪除。我們不能手動刪除這些郵件,因爲它們屬於/意爲原始客戶端(這是一個耐用的 訂戶)的 。
下面的鏈接很好地解釋了在JMS持久訂閱的概念: https://docs.oracle.com/cd/E19798-01/821-1841/bncgd/index.html
另外我已經提供了工具,它記錄(不刪除)以下示例代碼由耐用的消息訂閱主題:
InitialContext ctx = new InitialContext();
Topic topic = (Topic)ctx.lookup("myJMSTopic1");
TopicConnectionFactory connFactory = (TopicConnectionFactory) ctx.lookup("topicConnFactory");
TopicConnection topicConn = connFactory.createTopicConnection();
topicConn.setClientID("myToolId1"); //Use a different client id than original subscriber
TopicSession topicSession = topicConn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
TopicSubscriber topicSubscriber = topicSession.createDurableSubscriber(topic, "myClientExistingDuraSubName"); // this is where you have to provide the original client's durable subscription name
while(true) {
Message message = topicSubscriber.receive();
TextMessage txtMsg = (TextMessage)message;
logger.info(txtMsg.getText());
}
我的問題是,當你得到一個XA事務回滾例如從你的數據庫中,你不能刪除中毒的消息,對吧?在這種情況下,主題也會回滾。然後一些工具會很好。聽起來像是一個很常見的問題,所以想知道它沒有標準的解決方案... – Dirk
我明白了你的意思,你可以添加具有這個XATransaction代碼的MDB方法的代碼(在你的查詢中)嗎? – developer
現在我們有MDB在等待隊列並寫入數據庫。但是聽代碼時代碼會非常相似。你有什麼想法? – Dirk