package uk.nhs.kch.rassyeyanie.framework.route;
import org.apache.camel.LoggingLevel;
import org.apache.camel.model.OnExceptionDefinition;
/**
* Base class for any process that takes something off a queue.
*/
public abstract class AbstractConsumer
extends AbstractRouteBuilder
{
private String routeName;
private String inboundQueue;
private String errorQueue;
private int redeliveryAttempts;
private long redeliveryDelay;
private int nackRedeliveryAttempts;
private long nackRedeliveryDelay;
public String getRouteName()
{
return this.routeName;
}
public void setRouteName(String routeName)
{
this.routeName = routeName;
}
public String getInboundQueue()
{
return this.inboundQueue;
}
public void setInboundQueue(String inboundQueue)
{
this.inboundQueue = inboundQueue;
}
public String getErrorQueue()
{
return this.errorQueue;
}
public void setErrorQueue(String errorQueue)
{
this.errorQueue = errorQueue;
}
public void setRedeliveryAttempts(int redeliveryAttempts)
{
this.redeliveryAttempts = redeliveryAttempts;
}
public int getRedeliveryAttempts()
{
return this.redeliveryAttempts;
}
public void setRedeliveryDelay(long redeliveryDelay)
{
this.redeliveryDelay = redeliveryDelay;
}
/**
* Override this method to change the error handling for this transform. The
* default handler will catch all RuntimeExceptions and send the message to
* the defined error queue.
*/
protected void defineExceptionHandlers()
{
defineGeneralExceptionDefinition(
this.onException(ResponseException.class),
this.redeliveryAttempts == 0 ? 30 : this.redeliveryAttempts,
this.redeliveryDelay,
this.errorQueue,
true);
/*
* this
* .onException(Exception.class)
* .log(LoggingLevel.ERROR, "exception.stacktrace")
* .rollback();
*/
/*
* defineGeneralExceptionDefinition(
* this.onException(Exception.class),
* this.nackRedeliveryAttempts == 0 ? -1 : this.nackRedeliveryAttempts,
* this.nackRedeliveryDelay == 0L ? 1000L : this.nackRedeliveryDelay,
* this.errorQueue,
* false);
*/
}
private static
void
defineGeneralExceptionDefinition(OnExceptionDefinition exceptionDefinition,
int redeliveryAttempts,
long redeliveryDelay,
String errorQueue,
boolean logRetryAttempted)
{
exceptionDefinition.maximumRedeliveries(redeliveryAttempts);
exceptionDefinition.redeliveryDelay(redeliveryDelay);
exceptionDefinition.handled(true);
exceptionDefinition
.retryAttemptedLogLevel(LoggingLevel.ERROR)
.logRetryAttempted(logRetryAttempted)
.maximumRedeliveryDelay(60000)
.backOffMultiplier(10)
.to(ERROR_LOG)
.to(errorQueue);
}
public int getNackRedeliveryAttempts()
{
return this.nackRedeliveryAttempts;
}
public void setNackRedeliveryAttempts(int nackRedeliveryAttempts)
{
this.nackRedeliveryAttempts = nackRedeliveryAttempts;
}
public long getNackRedeliveryDelay()
{
return this.nackRedeliveryDelay;
}
public void setNackRedeliveryDelay(long nackRedeliveryDelay)
{
this.nackRedeliveryDelay = nackRedeliveryDelay;
}
}