2013-03-26 81 views
1

我有一個問題,通過使用fusesource代碼發佈mqtt消息到Apollo服務器。 我寫的消息公佈與如下代碼消息不保留在Apollo服務器

connection.publish(topic, message.getBytes(),QoS.AT_LEAST_ONCE, true); 

我也寫了贊同這樣的話題消息消費者。如果我首先啓動消費者,然後啓動發佈者,則消費者可以正確獲取所有消息。但是,如果我首先啓動發佈者,然後再啓動消費者,則消費者將不會收到消息。 另外,我進入Apollo管理控制檯,我無法在隊列中找到任何消息。 (請參閱附件截圖)。

我該怎麼辦才能解決這個問題?我無法讓我的客戶一直在運行,而且我也不想失去發佈商的任何消息。經紀人(阿波羅)不應該在消費者離線時保留所有消息嗎?如果是的話,我怎麼看不到它?

這似乎是一個愚蠢的問題,但我對MQTT很新,我確實需要一些幫助。

+0

你使用的是什麼版本的阿波羅? – 2013-04-25 13:43:43

回答

0

這看起來像一個錯誤,因爲您已將郵件標記爲保留。但是,我不知道阿波羅如何處理一個主題上的多個保留​​消息。你可能想在他們的郵件列表中提出這個問題。

+0

對於某個主題,只保留帶有保留標誌的最後一條消息。 https://activemq.apache.org/apollo/documentation/mqtt-manual.html#Topic_Retained_Messages – 2014-07-18 10:10:32

2

我懷疑當主題沒有生產者或消費者時,主題將被自動刪除。要禁用自動刪除「功能」,在apollo.xml的virual_host config元素中添加以下XML元素:

<topic auto_delete_after="0"/> 

阿波羅的未來版本將避免當持有保留的消息APLO-319刪除的話題。