public Mono<Void> stop(long timeoutMillis) {
        List<ClusterService> services = List.of(
                // Note that discoveryService should be stopped before sharedConfigService
                // because discoveryService needs to unregister the local member info in the shared
                // config
                discoveryService,
                sharedConfigService,
                sharedPropertyService,
                codecService,
                rpcService,
                idService,
                connectionService);
        List<Mono<Void>> monos = new ArrayList<>(services.size());
        for (ClusterService service : services) {
            try {
                Mono<Void> stop = service.stop(timeoutMillis);
                monos.add(stop);
            } catch (Exception e) {
                monos.add(Mono.error(new RuntimeException(
                        "Caught an error while stopping the service: "
                                + service.getClass()
                                        .getName(),
                        e)));
            }
        }
        return Mono.zipDelayError(monos, Function.identity())
                .then();
    }
@param propertiesManager is used to get local properties and listen to their changes
turms-server-common/src/main/java/im/turms/server/common/infra/cluster/node/Node.java