private void Connect(Endpoint endpoint, EndpointSession endpointSession)
 {
     Debug.WriteLine("producer try connect {0}:{1}", endpoint.Host, endpoint.Port);
     var future = CreateBootstrap(endpoint, endpointSession)
         .Connect(new IPEndPoint(IPAddress.Parse(endpoint.Host), endpoint.Port));
     future.Complete += (s, e) =>
     {
         var connectFuture = e.Future as DefaultConnectFuture;
         if (!endpointSession.IsClosed)
         {
             if (!connectFuture.Connected)
             {
                 Log.Error(string.Format("producer try connect failed at {0}:{1}", endpoint.Host, endpoint.Port));
                 if (metaService.ContainsEndpoint(endpoint))
                 {
                     endpointSession.SetSessionFuture(null);
                     System.Threading.Thread.Sleep(config.EndpointSessionAutoReconnectDelay * 1000);
                     Debug.WriteLine("producer try connect failed at {0}:{1}", endpoint.Host, endpoint.Port);
                     Connect(endpoint, endpointSession);
                 }
             }
             else
             {
                 Log.Info(String.Format("Connected to broker {0}", connectFuture.Session.RemoteEndPoint.ToString()));
                 endpointSession.SetSessionFuture(connectFuture);
             }
         }
         else
         {
             if (connectFuture.Connected)
                 future.Session.Close(true);
         }
     };
 }