Class ThrottlingInterceptor
- All Implemented Interfaces:
AdaptrisComponent
,ComponentLifecycle
,ComponentLifecycleExtension
,StateManagedComponent
,WorkflowInterceptor
A time slice is measured through the setTimeSliceInterval(TimeInterval)
. Once the first message is processed by this
interceptor, a time slice is created. The start of the time slice is the current time, the end of the time slice is set as the
current time + the number of time units in the configuration. Every message processed by the interceptor will start a check to
see if the current time slice is out of date. If it is out of date, then a new time slice is created. If the current time slice
is not out of date, then we check to make sure the maximum messages have not already passed through. If we have not yet reached
the maximum messages for the current time slice, we simply increment the message count on the time slice. If we have reached the
maximum messages, then we will delay this processing thread until the current time slice is finished, and finally a new time
slice is created.
Any given instance of the ThrottlingInterceptor can be set to work with a particular cache name. This allows you to configure a throttling interceptor on one or more workflows to all use the same time slice or use a completely different time slice.
For example, you can set workflow A and workflow B to both have a throttling interceptor, where both interceptors use the same cache name. This will have the effect of restricting the sum of messages passing through both workflows against the same time slice statistics.
Likewise, you may have a third workflow with an interceptor configured to use a different cache name. This means messages passing through the third workflow will not have the same throttling restrictions as those on workflow A and B.
The following properties may be set in configuration;- time-slice-interval - This is the number of time units each time slice will use. The default value is 5.
- maximum-messages - The maximum amount of messages allowed to pass through the current time slice The default value is
Integer.MAX_VALUE
- cache-provider - The implementation that handles the time slice memory management. The default is
TimeSliceDefaultCacheProvider
- cache-name - This allows you to set the cache name that the time slice statistics will be created/used from;this must be specified
In the adapter configuration file this class is aliased as throttling-interceptor which is the preferred alternative to the fully qualified classname when building your configuration.
-
Nested Class Summary
Nested classes/interfaces inherited from class com.adaptris.core.interceptor.WorkflowInterceptorImpl
WorkflowInterceptorImpl.WorkflowInterceptorException
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Closes the component.int
void
init()
Initialises the component.void
setCacheName
(String cacheName) Set the cache name for shared throttles.void
setCacheProvider
(TimeSliceCacheProvider cacheProvider) Set the caching provider for timeslices.void
setMaximumMessages
(int maximumMessages) Set the maximum number of messages that can be processed in each timeslice.void
setTimeSliceInterval
(TimeInterval interval) Set the interval for each timeslice.void
start()
Starts the component.void
stop()
Stop the componentvoid
workflowEnd
(AdaptrisMessage inputMsg, AdaptrisMessage outputMsg) Mark the end of a workflow.void
workflowStart
(AdaptrisMessage inputMsg) Mark the start of a workflow.Methods inherited from class com.adaptris.core.interceptor.WorkflowInterceptorImpl
changeState, getUniqueId, parentChannel, parentWorkflow, prepare, registerParentChannel, registerParentWorkflow, requestClose, requestInit, requestStart, requestStop, retrieveComponentState, setUniqueId, wasSuccessful
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.adaptris.core.WorkflowInterceptor
processingStart
-
Constructor Details
-
ThrottlingInterceptor
public ThrottlingInterceptor()
-
-
Method Details
-
init
Description copied from interface:ComponentLifecycle
Initialises the component.Component initialisation includes config verification, creation of connections etc.
- Throws:
CoreException
- wrapping any underlyingException
s
-
start
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 underlyingException
s
-
stop
public void stop()Description copied from interface:ComponentLifecycle
Stop the componentA stopped component is not expected to be ready to process messages. In the case of
AdaptrisMessageConsumer
, calling stop will pause message delivery. Throwing aRuntimeException
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 -
workflowStart
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
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 inputMsgoutputMsg
- the message contaning any changes that may have been applied by the services within the workflow.- See Also:
-
getMaximumMessages
public int getMaximumMessages() -
setMaximumMessages
public void setMaximumMessages(int maximumMessages) Set the maximum number of messages that can be processed in each timeslice.- Parameters:
maximumMessages
- the max number of messages, default is 2147483647
-
getCacheProvider
-
setCacheProvider
Set the caching provider for timeslices.- Parameters:
cacheProvider
- the caching provider.
-
getCacheName
-
setCacheName
Set the cache name for shared throttles.- Parameters:
cacheName
- the cache name.
-
setTimeSliceInterval
Set the interval for each timeslice.- Parameters:
interval
-
-
getTimeSliceInterval
-