mirror of https://github.com/apache/activemq.git
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:
parent
5a5056e73b
commit
3cd1e6c73f
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue