Search in sources :

Example 1 with JmsOperationTimedOutException

use of org.apache.qpid.jms.JmsOperationTimedOutException in project activemq-artemis by apache.

the class AmqpReceiver method stop.

private void stop(final AsyncResult request) {
    Receiver receiver = getEndpoint();
    if (receiver.getRemoteCredit() <= 0) {
        if (receiver.getQueued() == 0) {
            // We have no remote credit and all the deliveries have been processed.
            request.onSuccess();
        } else {
            // There are still deliveries to process, wait for them to be.
            stopRequest = request;
        }
    } else {
        // TODO: We don't actually want the additional messages that could be sent while
        // draining. We could explicitly reduce credit first, or possibly use 'echo' instead
        // of drain if it was supported. We would first need to understand what happens
        // if we reduce credit below the number of messages already in-flight before
        // the peer sees the update.
        stopRequest = request;
        receiver.drain(0);
        if (getDrainTimeout() > 0) {
            // If the remote doesn't respond we will close the consumer and break any
            // blocked receive or stop calls that are waiting.
            final ScheduledFuture<?> future = getSession().getScheduler().schedule(new Runnable() {

                @Override
                public void run() {
                    LOG.trace("Consumer {} drain request timed out", this);
                    Exception cause = new JmsOperationTimedOutException("Remote did not respond to a drain request in time");
                    locallyClosed(session.getConnection(), cause);
                    stopRequest.onFailure(cause);
                    session.pumpToProtonTransport(stopRequest);
                }
            }, getDrainTimeout(), TimeUnit.MILLISECONDS);
            stopRequest = new ScheduledRequest(future, stopRequest);
        }
    }
}
Also used : JmsOperationTimedOutException(org.apache.qpid.jms.JmsOperationTimedOutException) Receiver(org.apache.qpid.proton.engine.Receiver) JmsOperationTimedOutException(org.apache.qpid.jms.JmsOperationTimedOutException) InvalidDestinationException(javax.jms.InvalidDestinationException) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)1 InvalidDestinationException (javax.jms.InvalidDestinationException)1 JmsOperationTimedOutException (org.apache.qpid.jms.JmsOperationTimedOutException)1 Receiver (org.apache.qpid.proton.engine.Receiver)1