use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.
the class AMQChannel method deadLetter.
private void deadLetter(long deliveryTag) {
final UnacknowledgedMessageMap unackedMap = getUnacknowledgedMessageMap();
final MessageConsumerAssociation association = unackedMap.remove(deliveryTag, true);
if (association == null) {
LOGGER.warn("No message found, unable to DLQ delivery tag: " + deliveryTag);
} else {
final MessageInstance messageInstance = association.getMessageInstance();
final ServerMessage msg = messageInstance.getMessage();
int requeues = 0;
if (messageInstance.makeAcquisitionUnstealable(association.getConsumer())) {
requeues = messageInstance.routeToAlternate(new Action<MessageInstance>() {
@Override
public void performAction(final MessageInstance requeueEntry) {
messageWithSubject(ChannelMessages.DEADLETTERMSG(msg.getMessageNumber(), requeueEntry.getOwningResource().getName()));
}
}, null);
}
if (requeues == 0) {
final TransactionLogResource owningResource = messageInstance.getOwningResource();
if (owningResource instanceof Queue) {
final Queue<?> queue = (Queue<?>) owningResource;
final MessageDestination alternateBindingDestination = queue.getAlternateBindingDestination();
if (alternateBindingDestination == null) {
messageWithSubject(ChannelMessages.DISCARDMSG_NOALTEXCH(msg.getMessageNumber(), queue.getName(), msg.getInitialRoutingAddress()));
} else {
messageWithSubject(ChannelMessages.DISCARDMSG_NOROUTE(msg.getMessageNumber(), alternateBindingDestination.getName()));
}
}
}
}
}
use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.
the class AbstractQueue method addLifetimeConstraint.
private void addLifetimeConstraint(final Deletable<? extends Deletable> lifetimeObject) {
final Action<Deletable> deleteQueueTask = object -> Subject.doAs(getSubjectWithAddedSystemRights(), (PrivilegedAction<Void>) () -> {
AbstractQueue.this.delete();
return null;
});
lifetimeObject.addDeleteTask(deleteQueueTask);
addDeleteTask(new DeleteDeleteTask(lifetimeObject, deleteQueueTask));
}
use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.
the class AbstractExchange method addLifetimeConstraint.
private void addLifetimeConstraint(final Deletable<? extends Deletable> lifetimeObject) {
final Action<Deletable> deleteExchangeTask = object -> Subject.doAs(getSubjectWithAddedSystemRights(), (PrivilegedAction<Void>) () -> {
AbstractExchange.this.delete();
return null;
});
lifetimeObject.addDeleteTask(deleteExchangeTask);
_deleteTaskList.add(new DeleteDeleteTask(lifetimeObject, deleteExchangeTask));
}
use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.
the class ConsumerTarget_0_10 method sendToDLQOrDiscard.
private void sendToDLQOrDiscard(final MessageInstanceConsumer consumer, MessageInstance entry) {
final ServerMessage msg = entry.getMessage();
int requeues = 0;
if (entry.makeAcquisitionUnstealable(consumer)) {
requeues = entry.routeToAlternate(new Action<MessageInstance>() {
@Override
public void performAction(final MessageInstance requeueEntry) {
getEventLogger().message(ChannelMessages.DEADLETTERMSG(msg.getMessageNumber(), requeueEntry.getOwningResource().getName()));
}
}, null);
}
if (requeues == 0) {
TransactionLogResource owningResource = entry.getOwningResource();
if (owningResource instanceof Queue) {
final Queue<?> queue = (Queue<?>) owningResource;
final MessageDestination alternateBindingDestination = queue.getAlternateBindingDestination();
if (alternateBindingDestination != null) {
getEventLogger().message(ChannelMessages.DISCARDMSG_NOROUTE(msg.getMessageNumber(), alternateBindingDestination.getName()));
} else {
getEventLogger().message(ChannelMessages.DISCARDMSG_NOALTEXCH(msg.getMessageNumber(), queue.getName(), msg.getInitialRoutingAddress()));
}
}
}
}
Aggregations