2012-10-01 39 views
5

我正在對(Java)消息傳遞進行貿易研究&排隊系統用於即將重新設計主要Web應用程序的後端框架(在Amazon的EC2 Cloud ,x大實例)。我目前正在評估ActiveMQ和RabbitMQ。何時對Java消息傳遞和排隊系統使用持久性

該計劃是有5個不同的隊列,其中一個是死信隊列。每天發送的消息數量將在40K到400K之間。正如我計劃將消息內容作爲指向數據存儲上的XML文件位置的指針,我期望消息大約爲64個字節。但是,出於評估目的,我還想考慮在消息中發送原始XML,平均文件大小爲3KB。

我的主要問題:什麼時候/應該每天堅持多少消息?考慮到我上面指定的金額,堅持所有的信息是否合理?我知道持續下去會降低性能,可能是很多。但是,通過不堅持,正在使用大量的RAM。你們有些人會推薦什麼?另外,我知道有很多關於ActiveMQ(JMS)與RabbitMQ(AMQP)的信息。我做了大量的研究和測試。似乎任何一種實施都能滿足我的需求。考慮到我上面提供的信息(文件大小和消息編號),任何人都可以指出使用特定供應商的原因,我可能錯過了?

謝謝!

回答

2

什麼時候應該每天堅持多少條消息?考慮到上面指定的數量I ,它是否合理地持續所有消息?

JMS持久性不會替代數據庫,它應該被認爲是數據生產者和消費者之間的短暫緩衝區。這麼說,音量/消息你提到會不含稅任何現代JMS系統的持久性適配器尺寸(配置得當反正),可用於緩衝的必要延長處理時間的消息(只使用一個reliable message store architecture

我知道堅持會降低性能,可能是很多。 但是,通過不堅持,正在使用大量的RAM。你會推薦一些 ?

以我的經驗,使消息持久性不是一個重大的性能影響,並且幾乎總是用來保證消息。對於大多數應用程序,上游(生產者)或下游(消費者)的流程最終成爲瓶頸(特別是數據庫I/O)......不JMS持久性存儲

另外,我知道有很多關於在線ActiveMQ的 (JMS)與RabbitMQ的(AMQP)的信息。我做了大量的研究和 測試。似乎任何一種實施都能滿足我的需求。 考慮到我上面提供的信息(文件大小和# 消息),誰能指出使用某個特定供應商的原因,我可能錯過了?

我已經在許多項目中成功地使用了ActiveMQ來處理低和高卷消息。我建議使用它和Apache Camel這樣的路由引擎來簡化integrationcomplex routing patterns

+0

你一直是一個很好的幫助,謝謝你回答我的問題! – littleK

3

郵件系統必須用作臨時存儲。應用程序的設計應儘可能快地提取消息。性能越差的消息越多。如果你拉動消息,那麼會有更好的性能以及更少的內存使用。無論持久還是未使用內存仍然會被使用,因爲消息被保存在內存中以獲得更好的性能,並且如果消息類型只是持久性的,它們將在磁盤上備份。

有關消息持久性的決定取決於消息的重要性以及是否需要在消息傳遞提供程序重新啓動後才能生存。

您可能想看看IBM WebSphere MQ。它可以滿足你的要求。它具有JMS以及用於開發應用程序的專有API。

0

ActiveMQ是開源JMS的一個很好的選擇,我推薦的更昂貴的是TIBCO EMS或者Solace。

但是,JMS實際上是爲一次性交付而建立的,並且更長的持久性被排除在規範之外。你當然可以去數據庫,但這是沉重的重量,可能是昂貴的。

我會推薦的(注意:我爲CodeStreet工作)是我們的'ReplayService for JMS'。您可以將任何類型的JMS消息(或本機WebSphere MQ)存儲在高性能的基於文件的磁盤存儲中。每條消息都會自動分配一個納秒時間戳和一個可在發佈時覆蓋的globalMsgID。因此,XML消息可以由ReplayServer記錄,並且您的實際消息可以包含globalMsgID作爲參考。也許有些屬性?

一旦接收者接收到globalMsgID,它就可以根據需要從ReplayServer重放該消息。

但是另一方面,400K * 3KB的XML消息應該很容易實現ActiveMQ或其他。另外,您應該在發送之前壓縮XML消息。