Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Wildfly通过loadbalancer的出站连接进行远程EJB调用_Java_Wildfly_Ejb 3.1_Ejb 3.2 - Fatal编程技术网

Java Wildfly通过loadbalancer的出站连接进行远程EJB调用

Java Wildfly通过loadbalancer的出站连接进行远程EJB调用,java,wildfly,ejb-3.1,ejb-3.2,Java,Wildfly,Ejb 3.1,Ejb 3.2,我们有一些Wildfly服务器以独立模式运行。 每个实例都提供了一组无状态服务,这些服务可以通过一些Web应用程序的ejb远程调用(http远程处理)进行访问 webapplication的出站连接指向http loadbalancer,使用循环,无粘性。此平衡器在连接之前检查服务应用程序的可用性 到目前为止,这项工作还在进行中 问题是: 独立服务器的数量可能会有所不同。一旦从其中一个WebApp建立出站连接,它将永远不会关闭。因此,始终会访问相同的独立服务器,直到其死亡 在高负载情况下,我们只

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

webapplication的出站连接指向http loadbalancer,使用循环,无粘性。此平衡器在连接之前检查服务应用程序的可用性

到目前为止,这项工作还在进行中

问题是:

独立服务器的数量可能会有所不同。一旦从其中一个WebApp建立出站连接,它将永远不会关闭。因此,始终会访问相同的独立服务器,直到其死亡

在高负载情况下,我们只启动另一个运行独立服务器的VM(该服务器也将由loadbalancer使用)的目的不起作用,因为没有从webapps建立新的连接

问题:

这是一个可行的方案吗?如果可以,是否可以配置webapps在一段时间后启动新连接,请求计数,或者其他什么

我尝试了在底层不保留tcp或http头的有效性并请求空闲时间,但到目前为止没有成功

问候


Marcus

由于ejb远程调用的二进制性质,没有一种简单的方法可以动态平衡它们的负载。jbossejb客户机支持多个远程连接的规范,这些远程连接以循环方式调用,但列表仍然在客户机配置中硬编码

jboss客户端配置示例
jboss ejb客户端.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的所有调用序列化为二进制形式,这有利于更简单的配置和更好的性能

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

希望这会有所帮助

由于ejb远程调用的二进制性质,没有一种简单的方法可以动态平衡它们的负载。jbossejb客户机支持多个远程连接的规范,这些远程连接以循环方式调用,但列表仍然在客户机配置中硬编码

jboss客户端配置示例
jboss ejb客户端.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的所有调用序列化为二进制形式,这有利于更简单的配置和更好的性能

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

希望这有帮助

您应该使用standalone-ha.xml或standalone-full-ha.xml配置文件。虽然您可能不需要ha部分来管理集群中有状态bean的状态,但ejbclient需要它来自动发现集群中的其他节点


实际上,负载平衡是由ejbclient完成的,而不是单独的专用负载平衡器。您应该使用standalone-ha.xml或standalone-full-ha.xml配置文件。虽然您可能不需要ha部分来管理集群中有状态bean的状态,但ejbclient需要它来自动发现集群中的其他节点


实际上,负载平衡是由ejbclient完成的,而不是一个单独的专用负载平衡器

只是为了澄清:它只是关于HTTP(s)调用,而不是关于RMI调用(远程EJB这个术语在某种程度上暗示了这一点),对吗?是的。只有http远程处理。没有远程处理:/,等等。只是为了澄清一下:这只是关于HTTP(s)调用,而不是关于RMI调用(远程EJB这个术语不知怎么暗示的),对吗?是的。只有http远程处理。没有远程服务等。是的,非常感谢。这两种方法都是有用的。EJB后端ist与Webapps以及胖客户端应用程序共享。但在某些方面,REST将是未来重构的一种方式。是的,非常感谢。这两种方法都是有用的。EJB后端ist与Webapps以及胖客户端应用程序共享。但在某些方面,REST将是未来重构的一种方式。在远程胖客户端的情况下,HA将如何帮助?没有办法自动发现远程EJB主机,因此您仍然需要将连接信息硬编码到应用程序代码中。jBoss中的HA只为状态管理添加了modcluster和分布式缓存(Statefull会话bean、http会话…)——如果你想让你的应用程序扩展,这无论如何都是一种糟糕的做法。如果您确实想要HA和可扩展性,那么API和Loadbalancer是唯一的选择。没有办法进行完全自动的发现,但一旦ejbclient连接到列出的服务器之一,它就会自动发现群集中的所有其他节点,包括