Jms 连接失败:已达到最大连接数0

Jms 连接失败:已达到最大连接数0,jms,tibco,tibco-ems,Jms,Tibco,Tibco Ems,max\u connections属性设置为0(连接数不限),但ems服务器仍会不断将其发送到tibemsd.log [admin:somehost]:连接失败:已达到最大连接数0 这怎么可能呢 谢谢 对于任何感兴趣的人 似乎最多有256个管理员连接可以同时打开到ems服务器。 由于某些原因,max\u connections属性显然不控制此限制 下面是一个小例子来验证这一点 import com.tibco.tibjms.admin.TibjmsAdmin; public class Admi

max\u connections属性设置为0(连接数不限),但ems服务器仍会不断将其发送到tibemsd.log

[admin:somehost]:连接失败:已达到最大连接数0

这怎么可能呢

谢谢

对于任何感兴趣的人

似乎最多有256个管理员连接可以同时打开到ems服务器。 由于某些原因,max\u 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());}
  }
 }
}
导入com.tibco.tibjms.admin.TibjmsAdmin;
公共类AdminConnectionTest{
公共静态void main(字符串args[}){
int计数器=0;
试试{

为了(inti=0;i保护客户端不让连接过载服务器,我编写了一个简单的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
导入com.tibco.tibjms.admin.TibjmsAdmin;
导入com.tibco.tibjms.admin.tibjmsadmin异常;
导入org.apache.commons.pool2.PooledObject;
导入org.apache.commons.pool2.PooledObjectFactory;
导入org.apache.commons.pool2.impl.DefaultPooledObject;
公共类TIBCOAdminPolableObjectFactory实现PooledObjectFactory{
@凌驾
公共池对象makeObject()引发异常{
TibjmsAdmin=新的TibjmsAdmin(“tcp://tibco:7222“,”用户“,”密码“);
返回新的DefaultPooledObject(admin);
}
@凌驾
public void destroyObject(PooledObject po)引发异常{
po.getObject().close();
}
@凌驾
公共布尔validateObject(池对象po){
试一试{
po.getObject().getQueue(“xyzabc”);
}捕获(TibjmsadmineException ex){
System.out.println(例如getMessage());
返回false;
}
返回true;
}
@凌驾
public void activateObject(PooledObject po)引发异常{}
@凌驾
公共void被动对象(PooledObject po)引发异常{}
}
GenericObjectPool池=新的GenericObjectPool(新的TibcoAdminPoolableObjectFactory());
TibjmsAdmin=pool.borrowObject();
QueueInfo infos[]=admin.getQueues(“您的队列”);
pool.returnObject(admin);//在finally块中

听起来像是Tibco EMS试图保护自己。您是否尝试过使用commons池的连接池?