@ComponentProfile(summary="Interceptor that issues a JMX notification if a message took too long", tag="interceptor,jmx") public class SlowMessageNotification extends NotifyingInterceptor
Notification
if a message has exceeded the specified threshold
for processing within a workflow.
The Notification.setUserData(Object)
part of the notification is a Properties
object containing information about the message that exceeded the interceptors threshold. Note
that notifications are emitted whenever a message is deemed to have exceeded the threshold; you
might get multiple notifications if a message exceeds the threshold, fails and is automatically
retried (which again exceeds the threshold).
A cleanup thread is also started as part of this interceptor which purges internal data on a
periodic basis; this period is calculated based on the notification threshold (+1 minute) and any
messages that are outstanding will have a notification emitted for it, and removed. Because of
this, it will be possible to be notified before the message formally exits the workflow, but the
notification will still be after the threshold has been exceeded. If this occurs, then the
endTime and timeTaken markers are set to -1
WorkflowInterceptorImpl.WorkflowInterceptorException
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
KEY_MESSAGE_DURATION
Key within the properties containing the time taken in milliseconds
|
static java.lang.String |
KEY_MESSAGE_END
Key within the properties containing the end time in milliseconds
|
static java.lang.String |
KEY_MESSAGE_ID
Key within the properties containing the messageID
|
static java.lang.String |
KEY_MESSAGE_START
Key within the properties containing the start time in milliseconds
|
static java.lang.String |
KEY_MESSAGE_SUCCESS
Key within the properties containing whether the message was successful or not
|
log
Constructor and Description |
---|
SlowMessageNotification() |
SlowMessageNotification(java.lang.String uid,
TimeInterval threshold) |
Modifier and Type | Method and Description |
---|---|
void |
close()
Closes the component.
|
TimeInterval |
getNotifyThreshold() |
void |
init()
Initialises the component.
|
void |
setNotifyThreshold(TimeInterval t)
Specify the duration which if exceeded a
Notification will be sent. |
void |
start()
Starts the component.
|
void |
stop()
Stop the component
|
void |
workflowEnd(AdaptrisMessage inputMsg,
AdaptrisMessage outputMsg)
Mark the end of a workflow.
|
void |
workflowStart(AdaptrisMessage inputMsg)
Mark the start of a workflow.
|
changeState, getUniqueId, parentChannel, parentWorkflow, prepare, registerParentChannel, registerParentWorkflow, requestClose, requestInit, requestStart, requestStop, retrieveComponentState, setUniqueId, wasSuccessful
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
processingStart
public static final java.lang.String KEY_MESSAGE_ID
public static final java.lang.String KEY_MESSAGE_START
public static final java.lang.String KEY_MESSAGE_END
public static final java.lang.String KEY_MESSAGE_DURATION
public static final java.lang.String KEY_MESSAGE_SUCCESS
public SlowMessageNotification()
public SlowMessageNotification(java.lang.String uid, TimeInterval threshold)
public void workflowStart(AdaptrisMessage inputMsg)
WorkflowInterceptor
inputMsg
- the message that will be processed by this workflow.public void workflowEnd(AdaptrisMessage inputMsg, AdaptrisMessage outputMsg)
WorkflowInterceptor
inputMsg
- the original message that was originally submitted to the workflow; in the event of an exception during
processing, the exception will be stored in object metadata in the inputMsgoutputMsg
- the message contaning any changes that may have been applied by the services within the workflow.CoreConstants.OBJ_METADATA_EXCEPTION
public void init() throws CoreException
ComponentLifecycle
Component initialisation includes config verification, creation of connections etc.
CoreException
- wrapping any underlying Exception
spublic void start() throws CoreException
ComponentLifecycle
Once a component is started it should be ready to process messages. In the case of AdaptrisMessageConsumer
, calling start
will begin message delivery.
CoreException
- wrapping any underlying Exception
spublic void stop()
ComponentLifecycle
A stopped component is not expected to be ready to process messages. In the case of AdaptrisMessageConsumer
, calling stop
will pause message delivery. Throwing a RuntimeException
may cause unintended consequences
public void close()
ComponentLifecycle
A closed component should release any connections it uses, etc. and clean up completely. Throwing a RuntimeException
may
cause unintended consequences
public TimeInterval getNotifyThreshold()
public void setNotifyThreshold(TimeInterval t)
Notification
will be sent.t
- the duration, if not specified then 1 minute.