private void sendKeepaliveToConnectionsForever() {
        Thread thread = Thread.currentThread();
        while (!thread.isInterrupted()) {
            Iterator<Map.Entry<String, TurmsConnection>> iterator = nodeIdToConnection.entrySet()
                    .iterator();
            while (iterator.hasNext()) {
                try {
                    sendKeepalive(iterator);
                } catch (Exception e) {
                    LOGGER.error("Caught an error while sending a keepalive request", e);
                }
            }
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                break;
            }
        }
    }
Use supplier rather than just listener so that we can bind each generated listener to a
specific TcpConnection to make logic simple
turms-server-common/src/main/java/im/turms/server/common/infra/cluster/service/connection/ConnectionService.java