gpt4 book ai didi

java - Wildfly 通过负载均衡器通过出站连接进行远程 EJB 调用

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:54 28 4
gpt4 key购买 nike

我们有一些 Wildfly 服务器以独立模式运行。每个实例都提供一堆无状态服务,可以通过某些 Web 应用程序的 ejb 远程调用(http-remoting)来访问这些服务。

Web应用程序的出站连接指向使用循环法的http负载均衡器,无粘性。该平衡器在连接之前检查服务应用程序的可用性。

到目前为止,这项工作还可以,故障转移也可以。

问题:

独立服务器的数量可能会有所不同。一旦从某个网络应用程序建立出站连接,它就永远不会关闭。因此,始终会到达同一个独立服务器,直到它死亡为止。

在重负载下,我们只是启动另一个运行独立服务器的虚拟机(该服务器也将由负载均衡器使用)的目的是行不通的,因为没有从网络应用程序建立新的连接。

问题:

这是一个可行的方案吗?是否可以将 Web 应用程序配置为在一段时间、请求计数或其他情况后启动新连接?

我尝试在 undertow 和请求空闲时间内不保持 TCP 或 http header 的存活,但到目前为止没有成功。

亲切的问候

马库斯

最佳答案

由于 ejb 远程调用的二进制性质,没有简单的方法来动态负载平衡 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 的。是否有任何理由不在单个 .ear 部署中的同一服务器上运行 EJB 层和 Web?这样,您就可以使用本地访问,甚至可以将 @EJB bean 直接注入(inject)到 Web Controller 中,而无需将所有调用序列化为远程 EJB 的二进制形式,从而具有更简单的配置和更好的性能。

如果您的应用程序实际上是一个单独的部署,那么首选方法是通过 REST API(JAX-RS) 公开您的后端功能。这样就可以通过 HTTP 进行访问,您可以简单地从您的 Web 应用程序进行访问,并且可以像使用 Web UI 一样对其进行负载平衡(您可以选择将您的 API http 上下文保持私有(private) - 仅对同一网络上的服务在本地可见,或者将其公开,例如对于移动应用程序)。
希望有帮助

关于java - Wildfly 通过负载均衡器通过出站连接进行远程 EJB 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43811338/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com