2016-05-22 34 views
0

時。我的要求是,如果目標代理不可用,應該保留消息。我選擇了KahaDB作爲持久性適配器,以便消息在代理重啓時倖存下來。ActiveMQ的堅持在磁盤上,我使用Java和ActiveMQ從嵌入式Linux的發送信息只在必要

broker = new SslBrokerService(); 

KahaDBPersistenceAdapter kahaDBPersistenceAdapter=new KahaDBPersistenceAdapter(); 
kahaDBPersistenceAdapter.setJournalMaxFileLength(16 * 1024 * 1024); 
broker.setPersistenceAdapter(kahaDBPersistenceAdapter); 

/** Connector setup code */ 
broker.start(); 

即使我已經限制了最大文件大小爲16MB我想ONLY堅持的消息,如果目的地經紀人/消費者不可用。這是因爲限制了CPU和磁盤的使用。例如:產生消息1,嘗試發送消息。如果成功的持久性不應該發生,因爲我不想重新發送已發送的數據(或者應該只發生在內存中)。產生的消息2,3,4但目的地代理不可用,則在磁盤上,使得borker消息不太可能停產將會持續生存的消息。

通過的ActiveMQ文檔來回後,我還沒有找到我的使用情況,所以我問這個偉大的社會,如果我所尋求的其實是任何可能的答案。

回答

1

你將不得不編寫自定義插件,以獲取確切的情況。 JMS沒有描述一個用例堅持只要消費者是不可用的,B/C的可靠性合同也與製片人。我認爲一個存儲轉發設計就是你正在尋找的。配置embeddedBroker以使用static:networkConnector將其發送到目標代理。 ActiveMQ會自動將消息推送到目標服務器(如果可用),並在遠程代理不可用的情況下將它們排列在嵌入式服務器上。

+0

我使用的是網絡連接器已與嵌入式代理。我雖然這樣我就不得不爲我的用例構建一個自定義適配器。感謝您的建議 – rpirsc13