ensure exception is logged if one is raised sending a message to a dead letter queue

git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@569270 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Davies 2007-08-24 06:29:18 +00:00
parent 5a5056e73b
commit 3cd1e6c73f
1 changed files with 42 additions and 32 deletions

View File

@ -636,38 +636,48 @@ public class RegionBroker implements Broker {
getRoot().sendToDeadLetterQueue(context, node);
}
public void sendToDeadLetterQueue(ConnectionContext context, MessageReference node) {
try {
if (node != null) {
Message message = node.getMessage();
if (message != null) {
DeadLetterStrategy deadLetterStrategy = node.getRegionDestination().getDeadLetterStrategy();
if (deadLetterStrategy != null) {
if (deadLetterStrategy.isSendToDeadLetterQueue(message)) {
long expiration = message.getExpiration();
message.setExpiration(0);
message.setProperty("originalExpiration", new Long(expiration));
if (!message.isPersistent()) {
message.setPersistent(true);
message.setProperty("originalDeliveryMode", "NON_PERSISTENT");
}
// The original destination and transaction id do
// not get filled when the message is first
// sent,
// it is only populated if the message is routed to
// another destination like the DLQ
ActiveMQDestination deadLetterDestination = deadLetterStrategy.getDeadLetterQueueFor(message.getDestination());
BrokerSupport.resend(context, message, deadLetterDestination);
}
}
} else {
LOG.warn("Null message for node: " + node);
}
}
} catch (Exception e) {
LOG.warn("Failed to pass expired message to dead letter queue");
}
}
public void sendToDeadLetterQueue(ConnectionContext context,
MessageReference node){
try{
boolean sent=false;
if(node!=null){
Message message=node.getMessage();
if(message!=null&&node.getRegionDestination()!=null){
DeadLetterStrategy deadLetterStrategy=node
.getRegionDestination().getDeadLetterStrategy();
if(deadLetterStrategy!=null){
if(deadLetterStrategy.isSendToDeadLetterQueue(message)){
long expiration=message.getExpiration();
message.setExpiration(0);
message.setProperty("originalExpiration",new Long(
expiration));
if(!message.isPersistent()){
message.setPersistent(true);
message.setProperty("originalDeliveryMode",
"NON_PERSISTENT");
}
// The original destination and transaction id do
// not get filled when the message is first
// sent,
// it is only populated if the message is routed to
// another destination like the DLQ
ActiveMQDestination deadLetterDestination=deadLetterStrategy
.getDeadLetterQueueFor(message
.getDestination());
BrokerSupport.resend(context,message,
deadLetterDestination);
sent=true;
}
}
}
}
if(sent==false){
LOG.warn("Failed to send "+node+" to dead letter queue");
}
}catch(Exception e){
LOG.warn("Failed to pass expired message to dead letter queue",e);
}
}
public Broker getRoot() {
try {