public ServiceInstanceTopology getServiceInstanceTopology(final String clientServiceId,
                                                              final String serverServiceId,
                                                              final Duration duration) throws IOException {
        DebuggingTraceContext traceContext = TRACE_CONTEXT.get();
        DebuggingSpan span = null;
        try {
            if (traceContext != null) {
                span = traceContext.createSpan("Query Service: getServiceInstanceTopology");
                span.setMsg("ClientServiceId: " + clientServiceId + ", ServerServiceId: " + serverServiceId + ", Duration: " + duration);
            }
            return invokeGetServiceInstanceTopology(clientServiceId, serverServiceId, duration);
        } finally {
            if (traceContext != null && span != null) {
                traceContext.stopSpan(span);
            }
        }
    }
The topology built above is complete.
There is a special case, there may be a node of the `serviceIds` call these services as and only as a client, so it is included in the topology,
its component name could be missed as not being queried before. We add another query about this.
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyQueryService.java