2017-05-05 45 views
1

出站連接要求我們在獨立模式下運行一些Wildfly服務器。 每一個實例提供了一堆無狀態的服務,可以通過EJB遠程調用一些web應用(HTTP-遠程)訪問。Wildfly遠程EJB穿過負載平衡器

的web應用點的使用循環賽,無粘性一個http負載均衡器的出站連接。這個平衡器在連接之前檢查服務應用程序的可用性。

此工作至今,故障轉移也。

問題:

獨立服務器的數量可能會有所不同。一旦從其中一個web應用程序建立出站連接,它將永遠不會關閉。所以總是會有相同的獨立服務器,直到它死亡。

是重負載下,我們剛開始另一個VM運行也將通過負載均衡器使用不起作用一個獨立的服務器,因爲沒有新的連接從web應用建立的目的。

問:

這是可以工作的,如果是可以配置的webapps開始一段時間後,一個新的連接,請求計數,或任何一個場景?

我試過沒有保持tcp或http頭在承運人和請求空閒時間,但迄今爲止沒有成功。

親切的問候

馬庫斯

+0

只是爲了澄清:它只是關於HTTP(S)調用而不是關於RMI調用(術語遠程EJB以某種方式暗示的),是正確的? – home

+0

是的。只有http-remoting。沒有遠程處理://等等。 –

回答

0

有沒有簡單的方法來動態負載平衡EJB遠程調用,由於其二元特性。 JBoss的EJB客戶端支持多個遠程連接,即以循環方式調用的規格,但列表中仍然是您的客戶端配置硬編碼。

實例JBoss的客戶端配置jboss-ejb-client.properties

endpoint.name=client-endpoint 
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false 
remote.connections=node1,node2 
remote.connection.node1.host=192.168.1.105 
remote.connection.node1.port = 4447 
remote.connection.node1.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false 
remote.connection.node1.username=appuser 
remote.connection.node1.password=apppassword 
remote.connection.node2.host=192.168.1.106 
remote.connection.node2.port = 4447 
remote.connection.node2.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false 
remote.connection.node2.username=appuser 
remote.connection.node2.password=apppassword 

我明白了,你的web應用程序也基於Java的。有沒有任何理由不在同一臺服務器上同時運行EJB層和Web?.ear部署?這樣,您可以使用本地訪問,甚至可以將@EJB bean直接注入到您的Web控制器中,而無需將遠程EJB的所有調用串行化爲二進制形式,而且配置簡單,性能更好。

如果您的應用程序實際上是單獨部署,那麼首選方法是通過REST API(JAX-RS)公開您的後端功能。這樣它就可以通過HTTP訪問,您可以簡單地從您的Web應用程序訪問,並且可以像對待您的Web UI一樣對它進行負載平衡(您可以選擇將API http上下文保留爲私有 - 僅在本地爲服務可見在同一個網絡上,或者例如爲移動應用程序公開)。
希望有幫助

+0

是的,非常感謝。這兩種方法都是有用的。 EJB後端與Webapps以及胖客戶端應用程序共享。但是在某些方面,REST將是未來重構的一種方式。 –

0

您應該使用standalone-ha.xml或standalone-full-ha.xml配置文件。儘管您可能不需要ha部分來管理羣集中有狀態bean的狀態,但您需要它來讓ejbclient自動發現羣集中的其他節點

實際上,負載平衡是由ejbclient完成的,不是一個單獨的專用負載平衡器

+0

HA如何幫助遠程胖客戶?沒有辦法如何爲遠程EJB主機執行自動發現,因此您仍然需要將您的連接信息硬編碼到您的應用程序代碼中。 jBoss中的HA僅添加用於狀態管理的模塊化和分佈式緩存(Statefull會話bean,http會話..) - 如果您希望擴展應用程序,則無論如何這是不好的做法。如果您真的想要HA和擴展,那麼API和Loadbalancer是唯一的出路。 – yntelectual

+0

無法完全自動化的發現,但是一旦ejbclient連接到其中一個列出的服務器,它就會自動發現集羣中的所有其他節點,包括添加附加項或刪除節點。所以如果你說在192.168.1.1上總是有一臺服務器,但有時可以擴展到5,那麼你會在屬性中列出.1,在第二個中列出.1,以防萬一第一次出現故障 –