@VisibleForTesting
  void endpointCrashed(Endpoint endpoint) {
    QueueConnectionImpl deadConnection;
    // We must be synchronized while checking to see if we have a queue connection for the endpoint,
    // because when we need to prevent a race between adding a queue connection to the map
    // and the endpoint for that connection crashing.
    synchronized (lock) {
      deadConnection = queueConnections.getConnection(endpoint);
      if (deadConnection != null) {
        queueConnections = queueConnections.removeConnection(deadConnection);
      }
    }
    if (deadConnection != null) {
      logger
          .info("{} subscription endpoint {} crashed. Scheduling recovery.",
              new Object[] {deadConnection.getUpdater() != null
                  ? (deadConnection.getUpdater().isPrimary() ? "Primary" : "Redundant")
                  : "Queue",
                  endpoint});
      deadConnection.internalDestroy();
      scheduleRedundancySatisfierIfNeeded(0);
    } else {
      if (logger.isDebugEnabled()) {
        logger.debug("Ignoring crashed endpoint {} it does not have a queue.", endpoint);
      }
    }
  }
Manages Client Queues. Responsible for creating callback connections and satisfying redundancy
requirements.

@since GemFire 5.7
geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueManagerImpl.java