2011-08-02 35 views
2

爲了保持持久性,部署MDB的應用程序服務器應與JMS提供程序(服務器)分開,以便在應用程序服務器關閉並稍後重新啓動時,MDB可以發送應用服務器關閉時錯過的消息?MDB和耐久性

回答

0

我會說是的。一種選擇可以部署HornetQ的獨立:

http://docs.jboss.org/hornetq/2.2.5.Final/user-manual/en/html/architecture.html#d0e636

這樣你就不需要部署一個全功能的JBoss服務器,通過減少主機規格節省一些錢。 HornetQ在獨立模式下的內存佔用可能非常低。

如果分裂JMS代理和MDB客戶端是不是一種選擇,我做到了一次正在開發中,保持未發送的消息,因此,如果服務器關閉它存儲的消息,直到JBoss的又是在客戶端緩存的方式。

0

持久性屬性更適用於那些客戶認爲一切正常的情況,因爲服務器的主題已經接受了該消息,但是由於其中一個或多個關閉了,所以它不能實際上傳送給所有目標接收者。

但是,如果服務器從不接受郵件(因爲郵件也被拒絕了),客戶端不會認爲一切正常,所以沒有任何郵件會被神祕地遺漏。

更具體地說,耐久性屬性的確假定了多個遠程客戶端正在監聽的單個主題。如果你的設置是這樣的話,你已經在不同的遠程服務器上爲一個主題設置了多個監聽器,我想你不會問這個問題。所以我假設你的MDB全部部署在一臺服務器上。

在這種情況下,分離JMS提供程序可以提高健壯性,因爲只運行此提供程序的服務器可能具有較低的崩潰風險(更小的專用系統,尤其是沒有自己的代碼=不太可能崩潰),並且可能在必須重新啓動應用程序服務器的情況下作爲緩衝區使用。另一方面,每個服務器都會增加其中至少有一個崩潰的可能性增加,並且在某處出現配置錯誤的可能性也會增加。這是一個權衡,你必須讓自己。

2

但是,如果服務器從不接受郵件(因爲郵件也被拒絕了),客戶端不會認爲一切正常,所以沒有任何郵件會被神祕地遺漏。

更具體地說,耐久性屬性的確假定了多個遠程客戶端正在監聽的單個主題。如果你的設置是這樣的話,你已經在不同的遠程服務器上爲一個主題設置了多個監聽器,我想你不會問這個問題。所以我假設你的MDB全部部署在一臺服務器上。

在這種情況下,分離JMS提供程序可以提高健壯性,因爲只運行此提供程序的服務器可能具有較低的崩潰風險(更小的專用系統,尤其是沒有自己的代碼=不太可能崩潰),並且可能在必須重新啓動應用程序服務器的情況下作爲緩衝區使用。另一方面,每個服務器都會增加其中至少有一個崩潰的可能性增加,並且在某處出現配置錯誤的可能性也會增加。這是一個權衡,你必須讓自己。

+1

在這種情況下,分離JMS提供程序可以提高健壯性,因爲只運行此提供程序的服務器可能具有較低的崩潰風險(更小的更多專用系統,尤其是沒有自己的代碼=不太可能崩潰),並且可以運行作爲您必須重新啓動應用程序服務器的情況下的緩衝區。另一方面,每個服務器都會增加其中至少有一個崩潰的可能性增加,並且在某處出現配置錯誤的可能性也會增加。這是一個權衡,你必須讓自己。 – user1777716