diff --git a/connection.go b/connection.go
index <HASH>..<HASH> 100644
--- a/connection.go
+++ b/connection.go
@@ -129,17 +129,20 @@ func (connection *redisConnection) heartbeat(errChan chan<- error) {
 
 		errorCount++
 
-		select { // try to add error to channel, but don't block
-		case errChan <- &HeartbeatError{RedisErr: err, Count: errorCount}:
-		default:
-		}
-
 		if errorCount >= HeartbeatErrorLimit {
 			// reached error limit
 			connection.StopAllConsuming()
+			// Clients reading from errChan need to see this error
+			// This allows them to shut themselves down
+			// Therefore we block adding it to errChan to ensure delivery
+			errChan <- &HeartbeatError{RedisErr: err, Count: errorCount}
 			return
+		} else {
+			select { // try to add error to channel, but don't block
+			case errChan <- &HeartbeatError{RedisErr: err, Count: errorCount}:
+			default:
+			}
 		}
-
 		// keep trying until we hit the limit
 	}
 }
HeartbeatError is sent blocking on shutdown

When the heartbeat error threshold is reached, and RMQ shuts itself
down, the final HeartbeatError is sent in a blocking manner.

We do this to ensure that if the client is listening for this error it
is guaranteed to eventually see the error. If this critical error is
dropped the client may be unaware that RMQ has stopped working and won't
shut itself down.