@Override public Message.MessageDestination getRegionDestination() { return message.getRegionDestination(); }
@Override public void addMessageFirst(MessageReference node) throws Exception { // for keep durable subs active, need to deal with redispatch if (node != null) { Message msg = node.getMessage(); if (!msg.isPersistent()) { nonPersistent.addMessageFirst(node); } else { Destination dest = (Destination) msg.getRegionDestination(); TopicStorePrefetch tsp = topics.get(dest); if (tsp != null) { tsp.addMessageFirst(node); } } } }
if (getBrokerService().isEnableStatistics()) { long totalTime = endTime - message.getBrokerInTime(); ((Destination) message.getRegionDestination()).getDestinationStatistics().getProcessTime().addTime(totalTime); if (((BaseDestination) message.getRegionDestination()).isPersistJMSRedelivered() && !message.isRedelivered()) { final int originalValue = message.getRedeliveryCounter(); message.incrementRedeliveryCounter(); try { if (message.isPersistent()) { ((BaseDestination) message.getRegionDestination()).getMessageStore().updateMessage(message);
protected ActiveMQDestination createDestination(Message message, String prefix, String suffix, boolean useQueue, Subscription subscription ) { String name = null; Destination regionDestination = (Destination) message.getRegionDestination(); if (regionDestination != null && regionDestination.getActiveMQDestination() != null && regionDestination.getActiveMQDestination().getPhysicalName() != null && !regionDestination.getActiveMQDestination().getPhysicalName().isEmpty()){ name = prefix + regionDestination.getActiveMQDestination().getPhysicalName(); } else { name = prefix + message.getDestination().getPhysicalName(); } if (destinationPerDurableSubscriber && subscription instanceof DurableTopicSubscription) { name += "." + ((DurableTopicSubscription)subscription).getSubscriptionKey(); } if (suffix != null && !suffix.isEmpty()) { name += suffix; } if (useQueue) { return new ActiveMQQueue(name); } else { return new ActiveMQTopic(name); } }
@Override public synchronized boolean tryAddMessageLast(MessageReference node, long wait) throws Exception { if (node != null) { Message msg = node.getMessage(); if (isStarted()) { if (!msg.isPersistent()) { nonPersistent.tryAddMessageLast(node, wait); } } if (msg.isPersistent()) { Destination dest = (Destination) msg.getRegionDestination(); TopicStorePrefetch tsp = topics.get(dest); if (tsp != null) { tsp.addMessageLast(node); if (prioritizedMessages && immediatePriorityDispatch && tsp.isPaging()) { if (msg.getPriority() > tsp.getLastRecoveredPriority()) { tsp.recoverMessage(node.getMessage(), true); LOG.trace("cached high priority ({} message: {}, current paged batch priority: {}, cache size: {}", new Object[]{ msg.getPriority(), msg.getMessageId(), tsp.getLastRecoveredPriority(), tsp.batchList.size()}); } } } } } return true; }
private boolean isDestinationDLQ(Message message) { DeadLetterStrategy deadLetterStrategy; Message tmp; Destination regionDestination = (Destination) message.getRegionDestination(); if (message != null && regionDestination != null) { deadLetterStrategy = regionDestination.getDeadLetterStrategy(); if (deadLetterStrategy != null && message.getOriginalDestination() != null) { // Cheap copy, since we only need two fields tmp = new ActiveMQMessage(); tmp.setDestination(message.getOriginalDestination()); tmp.setRegionDestination(regionDestination); // Determine if we are headed for a DLQ ActiveMQDestination deadLetterDestination = deadLetterStrategy.getDeadLetterQueueFor(tmp, null); if (deadLetterDestination.equals(message.getDestination())) { return true; } } } return false; } }
@Override public boolean sendToDeadLetterQueue(ConnectionContext context, MessageReference messageReference, Subscription subscription, Throwable poisonCause) { boolean wasDLQd = super.sendToDeadLetterQueue(context, messageReference, subscription, poisonCause); if (wasDLQd) { try { if (!messageReference.isAdvisory()) { BaseDestination baseDestination = (BaseDestination) messageReference.getMessage().getRegionDestination(); ActiveMQTopic topic = AdvisorySupport.getMessageDLQdAdvisoryTopic(baseDestination.getActiveMQDestination()); Message payload = messageReference.getMessage().copy(); if (!baseDestination.isIncludeBodyForAdvisory()) { payload.clearBody(); } fireAdvisory(context, topic, payload); } } catch (Exception e) { handleFireFailure("add to DLQ", e); } } return wasDLQd; }
@Override public void messageExpired(ConnectionContext context, MessageReference messageReference, Subscription subscription) { super.messageExpired(context, messageReference, subscription); try { if (!messageReference.isAdvisory()) { BaseDestination baseDestination = (BaseDestination) messageReference.getMessage().getRegionDestination(); ActiveMQTopic topic = AdvisorySupport.getExpiredMessageTopic(baseDestination.getActiveMQDestination()); Message payload = messageReference.getMessage().copy(); if (!baseDestination.isIncludeBodyForAdvisory()) { payload.clearBody(); } ActiveMQMessage advisoryMessage = new ActiveMQMessage(); advisoryMessage.setStringProperty(AdvisorySupport.MSG_PROPERTY_MESSAGE_ID, payload.getMessageId().toString()); fireAdvisory(context, topic, payload, null, advisoryMessage); } } catch (Exception e) { handleFireFailure("expired", e); } }
if (!node.isExpired()) { try { regionDestination = (Destination) node.getMessage().getRegionDestination(); if (isDiskListEmpty()) { if (hasSpace() || this.store == null) {
@Override public void messageConsumed(ConnectionContext context, MessageReference messageReference) { super.messageConsumed(context, messageReference); try { if (!messageReference.isAdvisory()) { BaseDestination baseDestination = (BaseDestination) messageReference.getMessage().getRegionDestination(); ActiveMQTopic topic = AdvisorySupport.getMessageConsumedAdvisoryTopic(baseDestination.getActiveMQDestination()); Message payload = messageReference.getMessage().copy(); if (!baseDestination.isIncludeBodyForAdvisory()) { payload.clearBody(); } ActiveMQMessage advisoryMessage = new ActiveMQMessage(); advisoryMessage.setStringProperty(AdvisorySupport.MSG_PROPERTY_MESSAGE_ID, payload.getMessageId().toString()); advisoryMessage.setStringProperty(AdvisorySupport.MSG_PROPERTY_DESTINATION, baseDestination.getActiveMQDestination().getQualifiedName()); fireAdvisory(context, topic, payload, null, advisoryMessage); } } catch (Exception e) { handleFireFailure("consumed", e); } }
if (!node.isExpired()) { try { regionDestination = (Destination) node.getMessage().getRegionDestination(); if (isDiskListEmpty()) { if (hasSpace()) {
@Override public void messageDelivered(ConnectionContext context, MessageReference messageReference) { super.messageDelivered(context, messageReference); try { if (!messageReference.isAdvisory()) { BaseDestination baseDestination = (BaseDestination) messageReference.getMessage().getRegionDestination(); ActiveMQTopic topic = AdvisorySupport.getMessageDeliveredAdvisoryTopic(baseDestination.getActiveMQDestination()); Message payload = messageReference.getMessage().copy(); if (!baseDestination.isIncludeBodyForAdvisory()) { payload.clearBody(); } ActiveMQMessage advisoryMessage = new ActiveMQMessage(); advisoryMessage.setStringProperty(AdvisorySupport.MSG_PROPERTY_MESSAGE_ID, payload.getMessageId().toString()); advisoryMessage.setStringProperty(AdvisorySupport.MSG_PROPERTY_DESTINATION, baseDestination.getActiveMQDestination().getQualifiedName()); fireAdvisory(context, topic, payload, null, advisoryMessage); } } catch (Exception e) { handleFireFailure("delivered", e); } }
@Override public void messageDiscarded(ConnectionContext context, Subscription sub, MessageReference messageReference) { super.messageDiscarded(context, sub, messageReference); try { if (!messageReference.isAdvisory()) { BaseDestination baseDestination = (BaseDestination) messageReference.getMessage().getRegionDestination(); ActiveMQTopic topic = AdvisorySupport.getMessageDiscardedAdvisoryTopic(baseDestination.getActiveMQDestination()); Message payload = messageReference.getMessage().copy(); if (!baseDestination.isIncludeBodyForAdvisory()) { payload.clearBody(); } ActiveMQMessage advisoryMessage = new ActiveMQMessage(); if (sub instanceof TopicSubscription) { advisoryMessage.setIntProperty(AdvisorySupport.MSG_PROPERTY_DISCARDED_COUNT, ((TopicSubscription) sub).discarded()); } advisoryMessage.setStringProperty(AdvisorySupport.MSG_PROPERTY_MESSAGE_ID, payload.getMessageId().toString()); advisoryMessage.setStringProperty(AdvisorySupport.MSG_PROPERTY_CONSUMER_ID, sub.getConsumerInfo().getConsumerId().toString()); advisoryMessage.setStringProperty(AdvisorySupport.MSG_PROPERTY_DESTINATION, baseDestination.getActiveMQDestination().getQualifiedName()); fireAdvisory(context, topic, payload, null, advisoryMessage); } } catch (Exception e) { handleFireFailure("discarded", e); } }
@Override public Message.MessageDestination getRegionDestination() { return message.getRegionDestination(); }
@Override public Message.MessageDestination getRegionDestination() { return message.getRegionDestination(); }
@Override public Message.MessageDestination getRegionDestination() { return message.getRegionDestination(); }
public Destination getRegionDestination() { return message.getRegionDestination(); }
@Override public void addMessageFirst(MessageReference node) throws Exception { // for keep durable subs active, need to deal with redispatch if (node != null) { Message msg = node.getMessage(); if (!msg.isPersistent()) { nonPersistent.addMessageFirst(node); } else { Destination dest = (Destination) msg.getRegionDestination(); TopicStorePrefetch tsp = topics.get(dest); if (tsp != null) { tsp.addMessageFirst(node); } } } }
@Override public void addMessageFirst(MessageReference node) throws Exception { // for keep durable subs active, need to deal with redispatch if (node != null) { Message msg = node.getMessage(); if (!msg.isPersistent()) { nonPersistent.addMessageFirst(node); } else { Destination dest = (Destination) msg.getRegionDestination(); TopicStorePrefetch tsp = topics.get(dest); if (tsp != null) { tsp.addMessageFirst(node); } } } }
@Override public void preProcessDispatch(MessageDispatch messageDispatch) { Message message = messageDispatch.getMessage(); if (message != null) { long endTime = System.currentTimeMillis(); message.setBrokerOutTime(endTime); if (getBrokerService().isEnableStatistics()) { long totalTime = endTime - message.getBrokerInTime(); message.getRegionDestination().getDestinationStatistics().getProcessTime().addTime(totalTime); } } }