Search in sources :

Example 1 with AddMessageRecord

use of org.apache.activemq.artemis.core.persistence.impl.journal.AddMessageRecord in project activemq-artemis by apache.

the class PostOfficeJournalLoader method handleAddMessage.

@Override
public void handleAddMessage(Map<Long, Map<Long, AddMessageRecord>> queueMap) throws Exception {
    for (Map.Entry<Long, Map<Long, AddMessageRecord>> entry : queueMap.entrySet()) {
        long queueID = entry.getKey();
        Map<Long, AddMessageRecord> queueRecords = entry.getValue();
        Queue queue = this.queues.get(queueID);
        if (queue == null) {
            if (queueRecords.values().size() != 0) {
                ActiveMQServerLogger.LOGGER.journalCannotFindQueueForMessage(queueID);
            }
            continue;
        }
        // Redistribution could install a Redistributor while we are still loading records, what will be an issue with
        // prepared ACKs
        // We make sure te Queue is paused before we reroute values.
        queue.pause();
        Collection<AddMessageRecord> valueRecords = queueRecords.values();
        long currentTime = System.currentTimeMillis();
        for (AddMessageRecord record : valueRecords) {
            long scheduledDeliveryTime = record.getScheduledDeliveryTime();
            if (scheduledDeliveryTime != 0 && scheduledDeliveryTime <= currentTime) {
                scheduledDeliveryTime = 0;
                record.getMessage().setScheduledDeliveryTime(0L);
            }
            if (scheduledDeliveryTime != 0) {
                record.getMessage().setScheduledDeliveryTime(scheduledDeliveryTime);
            }
            MessageReference ref = postOffice.reroute(record.getMessage(), queue, null);
            ref.setDeliveryCount(record.getDeliveryCount());
            if (scheduledDeliveryTime != 0) {
                record.getMessage().setScheduledDeliveryTime(0L);
            }
        }
    }
}
Also used : AddMessageRecord(org.apache.activemq.artemis.core.persistence.impl.journal.AddMessageRecord) AtomicLong(java.util.concurrent.atomic.AtomicLong) MessageReference(org.apache.activemq.artemis.core.server.MessageReference) HashMap(java.util.HashMap) Map(java.util.Map) Queue(org.apache.activemq.artemis.core.server.Queue)

Aggregations

HashMap (java.util.HashMap)1 Map (java.util.Map)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1 AddMessageRecord (org.apache.activemq.artemis.core.persistence.impl.journal.AddMessageRecord)1 MessageReference (org.apache.activemq.artemis.core.server.MessageReference)1 Queue (org.apache.activemq.artemis.core.server.Queue)1