我在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个可能的第一个实例结束。
在我的案例中如何实现负载均衡?我是否需要独立客户端(单独项目中的Web应用程序)? glassfish集群如何知道我的servlet可以查找EJB的另一个实例?
答案 0 :(得分:0)
你的问题是你没有足够的负载。而且您查找 EJB 的方式很奇怪。
查找远程 EJB,而不是 servlet 中的属性。但是服务器的 JNDI 资源中的 CORBA / IIOP URL。 (在管理控制台中)
当您进行负载平衡时,使用 IIOP,每次查找都绑定到一个实例,并且仅切换到另一个实例以进行故障转移。
本质上,您在系统上没有足够的负载来触发 EJB 的其他实例。也许将池大小减少到 1 以模拟高负载。