void clear() { messageQueue.clear(); }
void close() { messageQueue.close(); }
clearMessagesInProgress(); clearDeliveredList(); synchronized (unconsumedMessages.getMutex()) { if (!unconsumedMessages.isClosed()) { if (this.info.isBrowser() || !session.connection.isDuplicate(this, md.getMessage())) { if (listener != null && unconsumedMessages.isRunning()) { if (redeliveryExceeded(md)) { posionAck(md, "listener dispatch[" + md.getRedeliveryCounter() + "] to " + getConsumerId() + " exceeds redelivery policy limit:" + redeliveryPolicy); if (!unconsumedMessages.isRunning()) { unconsumedMessages.enqueue(md); } else { if (!consumeExpiredMessage(md)) { unconsumedMessages.enqueue(md); if (availableListener != null) { availableListener.onMessageAvailable(this); unconsumedMessages.enqueue(null);
public void rollback() throws JMSException { clearDeliveredList(); synchronized (unconsumedMessages.getMutex()) { if (optimizeAcknowledge) { if (!unconsumedMessages.isClosed()) { unconsumedMessages.stop(); unconsumedMessages.enqueueFirst(md); deliveredMessages.clear(); if (redeliveryDelay > 0 && !unconsumedMessages.isClosed()) {
void clearMessagesInProgress() { if (inProgressClearRequiredFlag.get() > 0) { synchronized (unconsumedMessages.getMutex()) { if (inProgressClearRequiredFlag.get() > 0) { LOG.debug("{} clearing unconsumed list ({}) on transport interrupt", getConsumerId(), unconsumedMessages.size()); // ensure unconsumed are rolledback up front as they may get redelivered to another consumer List<MessageDispatch> list = unconsumedMessages.removeAll(); if (!this.info.isBrowser()) { for (MessageDispatch old : list) { session.connection.rollbackDuplicate(this, old.getMessage()); } } // allow dispatch on this connection to resume session.connection.transportInterruptionProcessingComplete(); inProgressClearRequiredFlag.decrementAndGet(); // Wake up any blockers and allow them to recheck state. unconsumedMessages.getMutex().notifyAll(); } } } clearDeliveredList(); }
public boolean iterate() { // Deliver any messages queued on the consumer to their listeners. for (ActiveMQMessageConsumer consumer : this.session.consumers) { if (consumer.iterate()) { return true; } } // No messages left queued on the listeners.. so now dispatch messages // queued on the session MessageDispatch message = messageQueue.dequeueNoWait(); if (message == null) { return false; } else { dispatch(message); return !messageQueue.isEmpty(); } }
MessageDispatch dequeueNoWait() { return messageQueue.dequeueNoWait(); }
public boolean isEmpty() { return messageQueue.isEmpty(); }
void stop() throws JMSException { try { if (messageQueue.isRunning()) { synchronized(this) { messageQueue.stop(); if (this.taskRunner != null) { this.taskRunner.shutdown(); this.taskRunner = null; } } } } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw JMSExceptionSupport.create(e); } }
/** * @throws IllegalStateException */ protected void checkClosed() throws IllegalStateException { if (unconsumedMessages.isClosed()) { throw new IllegalStateException("The Consumer is closed"); } }
void execute(MessageDispatch message) throws InterruptedException { if (!startedOrWarnedThatNotStarted) { ActiveMQConnection connection = session.connection; long aboutUnstartedConnectionTimeout = connection.getWarnAboutUnstartedConnectionTimeout(); if (connection.isStarted() || aboutUnstartedConnectionTimeout < 0L) { startedOrWarnedThatNotStarted = true; } else { long elapsedTime = System.currentTimeMillis() - connection.getTimeCreated(); // lets only warn when a significant amount of time has passed // just in case its normal operation if (elapsedTime > aboutUnstartedConnectionTimeout) { LOG.warn("Received a message on a connection which is not yet started. Have you forgotten to call Connection.start()? Connection: " + connection + " Received: " + message); startedOrWarnedThatNotStarted = true; } } } if (!session.isSessionAsyncDispatch() && !dispatchedBySessionPool) { dispatch(message); } else { messageQueue.enqueue(message); wakeup(); } }
void executeFirst(MessageDispatch message) { messageQueue.enqueueFirst(message); wakeup(); }
boolean isRunning() { return messageQueue.isRunning(); }