 +                self._connect(params)
                  return
 -            except (self.connection_errors, IOError), e:
-+            except (self.connection_errors, self.channel_errors, IOError), e:
++            except (IOError, self.connection_errors, self.channel_errors) as e:
                  pass
              except Exception, e:
                  # NOTE(comstud): Unfortunately it's possible for amqplib
-@@ -460,7 +463,7 @@
+@@ -483,12 +524,12 @@ class Connection(object):
              log_info = {}
              log_info['err_str'] = str(e)
              log_info['max_retries'] = self.max_retries

         """
         if self.connection:
             LOG.info(_("Reconnecting to AMQP server on "
-                    "%(hostname)s:%(port)d") % self.params)
+                    "%(hostname)s:%(port)d") % params)
             try:
                 self.connection.close()
             except self.connection_errors:
@@ -414,7 +416,8 @@
             # it shouldn't be doing any network operations, yet.
             self.connection = None
         self.connection = kombu.connection.BrokerConnection(
-                **self.params)
+                **params)
         self.connection_errors = self.connection.connection_errors
+        self.channel_errors = self.connection.channel_errors
         if self.memory_transport:
             # Kludge to speed up tests.
@@ -428,7 +430,7 @@
         for consumer in self.consumers:
             consumer.reconnect(self.channel)
         LOG.info(_('Connected to AMQP server on '
-                '%(hostname)s:%(port)d') % self.params)
+                '%(hostname)s:%(port)d') % params)
 
     def reconnect(self):
         """Handles reconnecting and re-establishing queues.
@@ -441,11 +443,12 @@
 
         attempt = 0
         while True:

-        for sp_key, value in server_params.iteritems():
-            p_key = server_params_to_kombu_params.get(sp_key, sp_key)
-            params[p_key] = value
+        ssl_params = self._fetch_ssl_params()
+        params_list = []
+        for adr in self.conf.rabbit_hosts:
+            hostname, port = network_utils.parse_host_port(
+                adr, default_port=self.conf.rabbit_port)
 
-        params.setdefault('hostname', self.conf.rabbit_host)
-        params.setdefault('port', self.conf.rabbit_port)
-        params.setdefault('userid', self.conf.rabbit_userid)
-        params.setdefault('password', self.conf.rabbit_password)
-        params.setdefault('virtual_host', self.conf.rabbit_virtual_host)
+            params = {}
 
-        self.params = params
+            for sp_key, value in server_params.iteritems():
+                p_key = server_params_to_kombu_params.get(sp_key, sp_key)
+                params[p_key] = value
 
-        if self.conf.fake_rabbit:
-            self.params['transport'] = 'memory'
-            self.memory_transport = True
-        else:
-            self.memory_transport = False
+            params.setdefault('hostname', hostname)
+            params.setdefault('port', port)
+            params.setdefault('userid', self.conf.rabbit_userid)
+            params.setdefault('password', self.conf.rabbit_password)
+            params.setdefault('virtual_host', self.conf.rabbit_virtual_host)
+
+            if self.conf.fake_rabbit:
+                params['transport'] = 'memory'
+            else:
+                params['transport'] = 'pyamqp'
+            if self.conf.rabbit_use_ssl:
+                params['ssl'] = ssl_params
 
-        if self.conf.rabbit_use_ssl:
-            self.params['ssl'] = self._fetch_ssl_params()
+            params_list.append(params)
+
+        self.params_list = params_list
+
+        self.memory_transport = self.conf.fake_rabbit
 
         self.connection = None
         self.reconnect()
@@ -422,23 +461,24 @@ class Connection(object):
             # Return the extended behavior
             return ssl_params
 
