@Override
    public IQ query(Component component, IQ packet, long timeout) throws ComponentException {
        final LinkedBlockingQueue<IQ> answer = new LinkedBlockingQueue<>(8);
        XMPPServer.getInstance().getIQRouter().addIQResultListener(packet.getID(), new IQResultListener() {
            @Override
            public void receivedAnswer(IQ packet) {
                answer.offer(packet);
            }

            @Override
            public void answerTimeout(String packetId) {
                Log.warn("An answer to a previously sent IQ stanza was never received. Packet id: " + packetId);
            }
        });
        sendPacket(component, packet);
        IQ reply = null;
        try {
            reply = answer.poll(timeout, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            // Ignore
        }
        return reply;
    }
Removes a given component. Unlike {@link #removeComponent(String)} this method will just
remove a single component instead of all components associated to the subdomain. External
components may connect several times and register for the same subdomain. This method
just removes a singled connection not all of them.

@param subdomain the subdomain of the component's address.
@param component specific component to remove.
xmppserver/src/main/java/org/jivesoftware/openfire/component/InternalComponentManager.java