Esempio n. 1
0
 /// <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);
 }
Esempio n. 2
0
        /// <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);
        }