2013-06-04 36 views
0

我正在使用ActiveMQ for C++。 在我們的計劃設計中,我們將使用消息,將它們傳遞給一些異步處理,然後才認爲消息處理完畢。 我們希望並行處理多個消息 - 每個消息都將在不同的時間完成處理 - 只確認處理完成的消息。這是爲了避免在服務器故障時丟失消息,進程崩潰等。ActiveMQ:一次只能查看一條消息

從文檔和測試中,我都瞭解,在CLIENT_ACKNOWLEDGE和SESSION_TRANSACTED模式下,無法僅確認一條消息。 這種情況是否有最佳做法?我應該持有一個「會話池」,每個會話同時處理一個消息,然後進行確認?

謝謝。

回答

0

在創建會話時,您可以使用cms :: Session確認模式INDIVIDUAL_ACKNOWLEDGE,它允許您確認單個消息。 cms :: Message對象有一個確認方法,可以用來確認每條消息。

cms::Session* session = connection.createSession(cms::Session::INDIVIDUAL_ACKNOWLEDGE); 

要確認消息:

cms::Message* message = consumer.receive(); 
message->acknowledge(); 
+0

不知怎的,我錯過了這個選項。謝謝,它的工作原理! –

0

儘管我從未真正實現過使用C++進行ActiveMQ併發使用,但這是您通常在Java中處理這種情況的方式。

使用會話和消息偵聽器創建大量不同的線程,每個線程讀取隊列的消息,執行處理並提交事務(或者如果您不想要事務,則進行確認)。