private void assertCurrentNodeIsAllowedToSend(RpcRequest<?> request) {
        NodeTypeToHandleRpc type = request.nodeTypeToRequest();
        boolean allowed = switch (type) {
            case BOTH -> true;
            case GATEWAY -> nodeType == NodeType.GATEWAY;
            case SERVICE -> nodeType == NodeType.SERVICE;
        };
        if (!allowed) {
            throw new IllegalArgumentException(
                    "The node type of the current server is: "
                            + nodeType
                            + ", which cannot send the request \""
                            + request.name()
                            + "\" that requires the node type: "
                            + type);
        }
    }
@return 1. a non-empty publisher that publishes an empty map if all peers respond with an
        empty payload; 2. a non-empty publisher that publishes a non-empty map if any peer
        responds with an non-empty valid payload; 3. error for other cases (e.g. no peer
        exists). The key is the member node ID, and the value is the response
turms-server-common/src/main/java/im/turms/server/common/infra/cluster/service/rpc/RpcService.java