0

我在 glassfish 3 集群内的 ejb 负载平衡有问题。

我有一个包含 EJB 模块和 WEB 模块的耳朵项目。我所有的 EJB 在 EJB 模块中都是无状态的和远程的。在 WEB 模块中,我有一个 servlet,它假设查找 ejb 并在集群中的哪个实例上打印他得到 ejb。

我像这样从 servlet 调用 EJB:

Properties props = System.getProperties(); props.setProperty("com.sun.appserv.iiop.endpoints", "10.8.10.202:23700,10.8.10.203:23700,10.8.10.204:23700,10.8.10.205:23700"); InitialContext ic = new InitialContext();

EJBRemote ejb = (EJBRemote) ic.lookup("java:global/app-name-ear/app-ejbs/EJB!com.tt.EJBRemote");

问题是我的请求总是以 4 的第一个实例结束。

在我的情况下如何实现负载平衡?我是否需要独立客户端(单独项目中的网络应用程序)?glassfish 集群如何知道我的 servlet 可以在其他实例中查找 EJB?

4

1 回答 1

0

你的问题是你没有足够的负载。而且您查找 EJB 的方式很奇怪。

查找远程 EJB,而不是 servlet 中的属性。但是服务器的 JNDI 资源中的 CORBA/IIOP URL。(在管理控制台中)

当您进行负载平衡时,使用 IIOP,每个查找都绑定到一个实例,并且仅切换到另一个实例以进行故障转移。

本质上,您没有足够的系统负载来触发 EJB 的其他实例。也许将池大小减少到 1 以模拟高负载。

于 2021-05-11T23:38:40.807 回答