關於ActiveMQ:我有一個場景,我有一個生產者向用戶發送小文件(大約10KB)。雖然文件很小,但消費者需要大約10秒來分析它們並將結果返回給製作人。我已經研究了很多,但我仍然無法找到以下問題的答案:ActiveMQ:緩慢處理消費者
- 如何讓代理存儲隊列中的文件(完全)?
- 我應該使用ObjectMessage(因爲文件很小)還是blob消息?
- 由於消費者處理緩慢,我應該降低他們的prefetchLimit還是使用循環調度策略?哪一個更好?
- 最後,在ActiveMQ常見問題解答中,我讀到了這一點 - 「如果消費者收到消息並且在關閉之前沒有確認它,那麼消息將被重新發送給另一個消費者。」所以我的問題是,ActiveMQ是否保證只有一個消費者會處理這個消息(因此對於生產者只有一個答案),或者不是?消費者何時確認消息(在默認的自動確認設置中) - 何時接收消息並將其存儲在會話中,或者onMessage處理程序何時完成?而且,由於消費者的處理速度非常緩慢,我應該改變一些「超時限制」,以便經紀人在將工作交給其他消費者之前知道需要等待多久(這與我之前的問題有關)?
非常感謝您的快速回復!實際上,我讀到的有關JMS(例如 - http://en.wikipedia.org/wiki/Java_Message_Service)的一些內容沒有被提及,或者與我讀到的關於ActiveMQ的內容相矛盾。例如,在那篇文章中,它表示消息存儲在隊列中(因此生產者在消費者使用該消息時不必處於活動狀態),這在activeMQ網站上無法找到。另外,它說在隊列模型(我說的那個)中,只有一個消費者得到消息(正如你所說的那樣,並不是由ActiveMQ保證的)。 – Petar 2010-09-22 22:02:37
對於ActiveMQ的文檔可能不是那麼好。但它肯定會存儲消息,因爲這是消息隊列的全部要點(異步操作)。有些模式沒有完整的持久性,只是將它們放在代理的內存隊列中,但這是您必須配置的。 – StaxMan 2010-09-23 00:22:57