2013-07-08 35 views
3

我想擴展一個小型中間件系統以添加可靠的FIFO通信,並且爲此,代理之間的連接需要爲FIFO。目前中間件的通信層支持socket和RMI。不過,我不認爲套接字和RMI可以爲消息對象提供FIFO排序。可靠的FIFO消息Java

有沒有在RMI的消息對象級別執行FIFO排序的方法?

到目前爲止,我已經得出結論,爲通信層使用類似JMS的東西來保證FIFO排序。這有意義嗎?或者還有其他輕量級替代品?

我認爲另一個選擇是使用消息編號並通過在套接字或RMI上編寫一個小協議來實現這個順序,但它看起來像很多工作,需要一些專業知識來處理特殊情況。

+1

我正在尋求可能的方法來使用Java進行可靠的消息傳遞,而不是使用特殊的產品!我的問題是,是否可以使用像JMS這樣的消息傳遞API,或者是否有其他替代方法/技術,而不是產品! – p00ya00

+0

「但是我不認爲套接字和RMI可以爲消息對象提供FIFO排序。」爲什麼不? – EJP

回答

2

有幾個開源郵件系統可用,例如RabbitMQActiveMQZeroMQHornetQ - 一旦你已經得到了他們建立他們都相當容易使用。如果你只是在線程之間而不是進程之間進行通信,那麼你可以使用BlockingQueuePriorityBlockingQueue(我所使用的大多數系統使用RabbitMQ/ActiveMQ/ZeroMQ/HornetQ在進程之間進行通信,然後使用[優先] BlockingQueue的)。

+0

謝謝!由於每個代理都位於不同的計算機上,因此我想在進程之間發送消息。所以你認爲使用MoM作爲另一個MoM的通信層是有意義的嗎?這是否是實現FIFO排序的唯一方法? – p00ya00

+1

@ p00ya00我認爲使用MoM作爲另一個MoM的通信層在簡單性方面是有意義的 - 您正在使用專門的排隊軟件,它擅長它的功能,而不必將排隊添加到現有軟件中結果引入錯誤的可能性,結果是混合系統更可靠。 (我從來沒有遇到消息系統拋出錯誤的問題 - 這些總是來自應用程序層。)我不知道使用RMI執行FIFO排序的方法。 –