由于 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 直接注入您的 Web 控制器,而无需将远程 EJB 的所有调用序列化为二进制形式,从而获得更简单的配置和更好的性能。
如果您的应用程序实际上是一个单独的部署,那么首选方法是通过 REST API(JAX-RS)公开您的后端功能。这样它就可以通过 HTTP 访问,您可以简单地从您的 Web 应用程序访问它,并且您可以像使用 Web UI 一样对其进行负载平衡(您可以选择将您的 API http 上下文保持为私有 - 仅在本地对服务可见在同一网络上,或将其公开,例如用于移动应用程序)。
希望有帮助