@Override public void actMessage(Transaction tx, MessageReference ref, boolean fromMessageReferences) throws Exception { incDelivering(ref); acknowledge(tx, ref, ackReason, null); if (fromMessageReferences) { refRemoved(ref); } } };
protected void removeMessageReference(ConsumerHolder<? extends Consumer> holder, MessageReference ref) { if (!nonDestructive) { holder.iter.remove(); refRemoved(ref); } }
@Override protected void refRemoved(MessageReference ref) { if (isNonDestructive()) { removeIfCurrent(ref); } super.refRemoved(ref); }
@Override public void actMessage(Transaction tx, MessageReference ref) throws Exception { String originalMessageAddress = ref.getMessage().getAnnotationString(Message.HDR_ORIGINAL_ADDRESS); String originalMessageQueue = ref.getMessage().getAnnotationString(Message.HDR_ORIGINAL_QUEUE); if (originalMessageAddress != null) { incDelivering(ref); Long targetQueue = null; if (originalMessageQueue != null && !originalMessageQueue.equals(originalMessageAddress)) { targetQueue = queues.get(originalMessageQueue); if (targetQueue == null) { Binding binding = postOffice.getBinding(SimpleString.toSimpleString(originalMessageQueue)); if (binding != null && binding instanceof LocalQueueBinding) { targetQueue = ((LocalQueueBinding) binding).getID(); queues.put(originalMessageQueue, targetQueue); } } } if (targetQueue != null) { move(SimpleString.toSimpleString(originalMessageAddress), tx, ref, false, false, targetQueue.longValue()); } else { move(SimpleString.toSimpleString(originalMessageAddress), tx, ref, false, false); } refRemoved(ref); } } });
refRemoved(ref); } catch (Exception e) { ActiveMQServerLogger.LOGGER.errorExpiringReferencesOnQueue(e, ref);
@Override public synchronized MessageReference removeReferenceWithID(final long id1) throws Exception { try (LinkedListIterator<MessageReference> iterator = iterator()) { MessageReference removed = null; while (iterator.hasNext()) { MessageReference ref = iterator.next(); if (ref.getMessage().getMessageID() == id1) { iterator.remove(); refRemoved(ref); removed = ref; break; } } if (removed == null) { // Look in scheduled deliveries removed = scheduledDeliveryHandler.removeReferenceWithID(id1); } return removed; } }
@Override public void actMessage(Transaction tx, MessageReference ref) throws Exception { boolean ignored = false; incDelivering(ref); if (rejectDuplicates) { byte[] duplicateBytes = ref.getMessage().getDuplicateIDBytes(); if (duplicateBytes != null) { if (targetDuplicateCache.contains(duplicateBytes)) { ActiveMQServerLogger.LOGGER.messageWithDuplicateID(ref.getMessage().getDuplicateProperty(), toAddress, address, address); acknowledge(tx, ref); ignored = true; } } } if (!ignored) { move(null, toAddress, binding, ref, rejectDuplicates, AckReason.NORMAL, null); refRemoved(ref); //move(toAddress, tx, ref, false, rejectDuplicates); } } });
@Override public synchronized boolean sendMessageToDeadLetterAddress(final long messageID) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { incDelivering(ref); sendToDeadLetterAddress(null, ref); iter.remove(); refRemoved(ref); return true; } } return false; } }
@Override public synchronized int sendMessagesToDeadLetterAddress(Filter filter) throws Exception { int count = 0; try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { incDelivering(ref); sendToDeadLetterAddress(null, ref); iter.remove(); refRemoved(ref); count++; } } return count; } }
@Override public synchronized int changeReferencesPriority(final Filter filter, final byte newPriority) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { int count = 0; while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { count++; iter.remove(); refRemoved(ref); ref.getMessage().setPriority(newPriority); addTail(ref, false); } } return count; } }
@Override public synchronized boolean changeReferencePriority(final long messageID, final byte newPriority) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { iter.remove(); refRemoved(ref); ref.getMessage().setPriority(newPriority); addTail(ref, false); return true; } } return false; } }
@Override public synchronized boolean expireReference(final long messageID) throws Exception { if (isExpirationRedundant()) { return false; } try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { incDelivering(ref); expire(ref); iter.remove(); refRemoved(ref); return true; } } return false; } }
@Override public synchronized boolean moveReference(final long messageID, final SimpleString toAddress, final Binding binding, final boolean rejectDuplicate) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { iter.remove(); refRemoved(ref); incDelivering(ref); try { move(null, toAddress, binding, ref, rejectDuplicate, AckReason.NORMAL, null); } catch (Exception e) { decDelivering(ref); throw e; } return true; } } return false; } }
@Override public synchronized int expireReferences(final Filter filter) throws Exception { if (isExpirationRedundant()) { return 0; } Transaction tx = new TransactionImpl(storageManager); int count = 0; try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { incDelivering(ref); expire(tx, ref); iter.remove(); refRemoved(ref); count++; } } tx.commit(); return count; } }
@Override public synchronized boolean deleteReference(final long messageID) throws Exception { boolean deleted = false; Transaction tx = new TransactionImpl(storageManager); try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { incDelivering(ref); acknowledge(tx, ref); iter.remove(); refRemoved(ref); deleted = true; break; } } if (!deleted) { // Look in scheduled deliveries deleted = scheduledDeliveryHandler.removeReferenceWithID(messageID) != null ? true : false; } tx.commit(); return deleted; } }