的MAX_CONNECTIONS属性设置为(无限数目的连接),但仍是EMS服务器不断吐出这tibemsd.log连接失败:达到最大连接数0
[管理员:somehost]:连接失败:达到最大连接数0
这怎么可能?
谢谢!
的MAX_CONNECTIONS属性设置为(无限数目的连接),但仍是EMS服务器不断吐出这tibemsd.log连接失败:达到最大连接数0
[管理员:somehost]:连接失败:达到最大连接数0
这怎么可能?
谢谢!
任何有兴趣,
它似乎有最多256个管理连接,可以同时打开到EMS服务器的限制。 由于某种原因,此限制显然不受max_connections属性的控制。
下面是一个小例子来验证这一点。
import com.tibco.tibjms.admin.TibjmsAdmin;
public class AdminConnectionTest{
public static void main(String args[}){
int counter =0;
try{
for(int i=0;i<1000;i++){
TibjmsAdmin admin = new TibjmsAdmin("tcp://localhost:7222","someuser","someuser");
counter++;
}
}catch(Exception e){
System.out.println("Connections created: "+counter);
System.out.println(e.getMessage());
try{
Thread.sleep(20000); //Some delay to make it possible to verify this from emsadmin
}catch(Exception ee){System.out.println(ee.getMessage());}
}
}
}
为了保护客户端免于连接服务器,我写了一个简单的commons pool2类。
import com.tibco.tibjms.admin.TibjmsAdmin;
import com.tibco.tibjms.admin.TibjmsAdminException;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
public class TibcoAdminPoolableObjectFactory implements PooledObjectFactory<TibjmsAdmin>{
@Override
public PooledObject<TibjmsAdmin> makeObject() throws Exception {
TibjmsAdmin admin = new TibjmsAdmin("tcp://tibco:7222","USER","password");
return new DefaultPooledObject<>(admin);
}
@Override
public void destroyObject(PooledObject<TibjmsAdmin> po) throws Exception {
po.getObject().close();
}
@Override
public boolean validateObject(PooledObject<TibjmsAdmin> po) {
try {
po.getObject().getQueue("xyzabc");
} catch (TibjmsAdminException ex) {
System.out.println(ex.getMessage());
return false;
}
return true;
}
@Override
public void activateObject(PooledObject<TibjmsAdmin> po) throws Exception {}
@Override
public void passivateObject(PooledObject<TibjmsAdmin> po) throws Exception {}
}
GenericObjectPool<TibjmsAdmin> pool = new GenericObjectPool<>(new TibcoAdminPoolableObjectFactory());
TibjmsAdmin admin = pool.borrowObject();
QueueInfo infos[] = admin.getQueues("YOURQUEUE");
pool.returnObject(admin);//in a finally block
听起来像Tibco EMS试图保护自己。您是否尝试过使用公共池进行连接池? – rjdkolb