Class SlowMessageNotification

  • All Implemented Interfaces:
    AdaptrisComponent, ComponentLifecycle, ComponentLifecycleExtension, StateManagedComponent, WorkflowInterceptor

    @ComponentProfile(summary="Interceptor that issues a JMX notification if a message took too long",
                      tag="interceptor,jmx")
    public class SlowMessageNotification
    extends NotifyingInterceptor
    Interceptor that emits a 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

    Since:
    3.0.4
    • Field Detail

      • KEY_MESSAGE_ID

        public static final java.lang.String KEY_MESSAGE_ID
        Key within the properties containing the messageID
        See Also:
        Constant Field Values
      • KEY_MESSAGE_START

        public static final java.lang.String KEY_MESSAGE_START
        Key within the properties containing the start time in milliseconds
        See Also:
        Constant Field Values
      • KEY_MESSAGE_END

        public static final java.lang.String KEY_MESSAGE_END
        Key within the properties containing the end time in milliseconds
        See Also:
        Constant Field Values
      • KEY_MESSAGE_DURATION

        public static final java.lang.String KEY_MESSAGE_DURATION
        Key within the properties containing the time taken in milliseconds
        See Also:
        Constant Field Values
      • KEY_MESSAGE_SUCCESS

        public static final java.lang.String KEY_MESSAGE_SUCCESS
        Key within the properties containing whether the message was successful or not
        See Also:
        Constant Field Values
    • Constructor Detail

      • SlowMessageNotification

        public SlowMessageNotification()
      • SlowMessageNotification

        public SlowMessageNotification​(java.lang.String uid,
                                       TimeInterval threshold)
    • Method Detail

      • workflowStart

        public void workflowStart​(AdaptrisMessage inputMsg)
        Description copied from interface: WorkflowInterceptor
        Mark the start of a workflow. This doesn't mean the message has started processing but only that the message will - at some point - be processed by the workflow.
        Parameters:
        inputMsg - the message that will be processed by this workflow.
      • workflowEnd

        public void workflowEnd​(AdaptrisMessage inputMsg,
                                AdaptrisMessage outputMsg)
        Description copied from interface: WorkflowInterceptor
        Mark the end of a workflow.
        Parameters:
        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 inputMsg
        outputMsg - the message contaning any changes that may have been applied by the services within the workflow.
        See Also:
        CoreConstants.OBJ_METADATA_EXCEPTION
      • init

        public void init()
                  throws CoreException
        Description copied from interface: ComponentLifecycle
        Initialises the component.

        Component initialisation includes config verification, creation of connections etc.

        Throws:
        CoreException - wrapping any underlying Exceptions
      • start

        public void start()
                   throws CoreException
        Description copied from interface: ComponentLifecycle
        Starts the component.

        Once a component is started it should be ready to process messages. In the case of AdaptrisMessageConsumer, calling start will begin message delivery.

        Throws:
        CoreException - wrapping any underlying Exceptions
      • stop

        public void stop()
        Description copied from interface: ComponentLifecycle
        Stop the component

        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

      • close

        public void close()
        Description copied from interface: ComponentLifecycle
        Closes the component.

        A closed component should release any connections it uses, etc. and clean up completely. Throwing a RuntimeException may cause unintended consequences

      • getNotifyThreshold

        public TimeInterval getNotifyThreshold()
      • setNotifyThreshold

        public void setNotifyThreshold​(TimeInterval t)
        Specify the duration which if exceeded a Notification will be sent.
        Parameters:
        t - the duration, if not specified then 1 minute.