2017-05-05 22 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,以防万一第一次出现故障 –