void processMessage(HeartbeatRequestMessage<ID> m) {
    if (isStopping) {
      return;
    }
    if (beingSick || playingDead) {
      logger.debug("sick member is ignoring check request");
      return;
    }

    stats.incHeartbeatRequestsReceived();

    if (isStopping) {
      return;
    }

    // only respond if the intended recipient is this member
    ID me = localAddress;

    if (me == null || me.getVmViewId() >= 0 && m.getTarget().equals(me)) {
      HeartbeatMessage<ID> hm = new HeartbeatMessage<>(m.getRequestId());
      hm.setRecipient(m.getSender());
      Set<ID> membersNotReceivedMsg = services.getMessenger().send(hm);
      stats.incHeartbeatsSent();
      if (membersNotReceivedMsg != null && membersNotReceivedMsg.contains(m.getSender())) {
        logger.debug("Unable to send heartbeat to member: {}", m.getSender());
      }
    } else {
      logger.debug("Ignoring heartbeat request intended for {}.  My ID is {}", m.getTarget(), me);
    }
  }
Test method - check to see if a member is under suspicion
geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java