private QueueConnectionImpl createNewPrimary(Set<ServerLocation> excludedServers) {
    QueueConnectionImpl primary = null;
    while (primary == null && pool.getPoolOrCacheCancelInProgress() == null) {
      List<ServerLocation> servers =
          findQueueServers(excludedServers, 1, false, printPrimaryNotFoundError,
              "Could not find any server to host primary client queue. Number of excluded servers is %s and exception is %s");
      printPrimaryNotFoundError = false; // printed above
      if (servers == null || servers.isEmpty()) {
        break;
      }

      Connection connection = null;
      try {
        connection = factory.createClientToServerConnection(servers.get(0), true);
      } catch (GemFireSecurityException e) {
        throw e;
      } catch (Exception e) {
        if (logger.isDebugEnabled()) {
          logger.debug("SubscriptionManagerImpl - error creating a connection to server {}",
              servers.get(0));
        }
      }
      if (connection != null) {
        primary = initializeQueueConnection(connection, true, queueConnections.getFailedUpdater());
      }
      excludedServers.addAll(servers);
    }

    return primary;
  }
Create a new primary server from a non-redundant server.

Add any failed servers to the excludedServers set.
geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueManagerImpl.java