/// <summary> /// 连接可用性检查 /// </summary> /// <param name="c"></param> /// <returns></returns> private bool ConnectionCheck(ActiveMQPoolConnection c) { if (!c.Connection.IsStarted) { c.Connection.Start(); } if (c.Connection is Apache.NMS.ActiveMQ.Connection) { var mqconn = c.Connection as Apache.NMS.ActiveMQ.Connection; if (mqconn.FirstFailureError != null || mqconn.TransportFailed == true) { return(false); } } return(true); }
/// <summary> /// 从池用获取可用连接 /// </summary> /// <returns></returns> public ActiveMQPoolConnection GetPoolConnection() { //连接池未满 if (Connections.Count < Config.MaxConnectCount) { var conn = ConnectionFactory.CreateConnection();//放在锁外面是为了加快初始化速度 bool ifadd = true; lock (_connlock) { if (Connections.Count <= Config.MaxConnectCount)//重新检查连接池数量 { var poolconn = new ActiveMQPoolConnection(this, conn); Connections.Add(poolconn); return(poolconn); } else { ifadd = false; } } if (ifadd == false) { conn.Close(); conn.Dispose(); } } int radomcount = Random(Config.MaxConnectCount);//随机连接复用 var c = Connections[radomcount]; if (!ConnectionCheck(c))//连接损坏,则修复 { lock (_connlock) { c = Connections[radomcount]; if (!ConnectionCheck(c)) { var conn = ConnectionFactory.CreateConnection(); var poolconn = new ActiveMQPoolConnection(this, conn); Connections[radomcount] = poolconn; c = Connections[radomcount]; } } } return(c); }