Class OrderInterceptor
java.lang.Object
org.apache.catalina.tribes.group.ChannelInterceptorBase
org.apache.catalina.tribes.group.interceptors.OrderInterceptor
- All Implemented Interfaces:
ChannelInterceptor
,Heartbeat
,MembershipListener
The order interceptor guarantees that messages are received in the same order they were sent. This interceptor works
best with the ack=true setting.
There is no point in using this with the replicationMode="fastasynchqueue" as this mode guarantees ordering.
If you are using the mode ack=false replicationMode=pooled, and have a lot of concurrent threads, this interceptor can really slow you down, as many messages will be completely out of order and the queue might become rather large. If this is the case, then you might want to set the value OrderInterceptor.maxQueue = 25 (meaning that we will never keep more than 25 messages in our queue)
Configuration Options
OrderInterceptor.expire=<milliseconds> - if a message arrives out of order, how long before we act on it default=3000ms
OrderInterceptor.maxQueue=<max queue size> - how much can the queue grow to ensure ordering. This setting is useful to avoid OutOfMemoryErrorsdefault=Integer.MAX_VALUE
OrderInterceptor.forwardExpired=<boolean> - this flag tells the interceptor what to do when a message has expired or the queue has grown larger than the maxQueue value. true means that the message is sent up the stack to the receiver that will receive and out of order message false means, forget the message and reset the message counter. default=true
There is no point in using this with the replicationMode="fastasynchqueue" as this mode guarantees ordering.
If you are using the mode ack=false replicationMode=pooled, and have a lot of concurrent threads, this interceptor can really slow you down, as many messages will be completely out of order and the queue might become rather large. If this is the case, then you might want to set the value OrderInterceptor.maxQueue = 25 (meaning that we will never keep more than 25 messages in our queue)
Configuration Options
OrderInterceptor.expire=<milliseconds> - if a message arrives out of order, how long before we act on it default=3000ms
OrderInterceptor.maxQueue=<max queue size> - how much can the queue grow to ensure ordering. This setting is useful to avoid OutOfMemoryErrorsdefault=Integer.MAX_VALUE
OrderInterceptor.forwardExpired=<boolean> - this flag tells the interceptor what to do when a message has expired or the queue has grown larger than the maxQueue value. true means that the message is sent up the stack to the receiver that will receive and out of order message false means, forget the message and reset the message counter. default=true
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static class
protected static class
Nested classes/interfaces inherited from interface org.apache.catalina.tribes.ChannelInterceptor
ChannelInterceptor.InterceptorEvent
-
Field Summary
Fields inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
optionFlag
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionlong
boolean
protected OrderInterceptor.Counter
getInCounter
(Member mbr) int
protected OrderInterceptor.Counter
getOutCounter
(Member mbr) protected int
incCounter
(Member mbr) void
memberAdded
(Member member) A member was added to the groupvoid
memberDisappeared
(Member member) A member was removed from the group
If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD datavoid
themessageReceived
is invoked when a message is received.protected boolean
protected void
processLeftOvers
(Member member, boolean force) void
sendMessage
(Member[] destination, ChannelMessage msg, InterceptorPayload payload) ThesendMessage
method is called when a message is being sent to one more destinations.void
setExpire
(long expire) void
setForwardExpired
(boolean forwardExpired) void
setMaxQueue
(int maxQueue) Methods inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, heartbeat, okToProcess, setChannel, setNext, setOptionFlag, setPrevious, start, stop
-
Field Details
-
sm
-
-
Constructor Details
-
OrderInterceptor
public OrderInterceptor()
-
-
Method Details
-
sendMessage
public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException Description copied from interface:ChannelInterceptor
ThesendMessage
method is called when a message is being sent to one more destinations. The interceptor can modify any of the parameters and then pass on the message down the stack by invokinggetNext().sendMessage(destination,msg,payload)
Alternatively the interceptor can stop the message from being sent by not invokinggetNext().sendMessage(destination,msg,payload)
If the message is to be sent asynchronous the application can be notified of completion and errors by passing in an error handler attached to a payload object.
The ChannelMessage.getAddress contains Channel.getLocalMember, and can be overwritten to simulate a message sent from another node.- Specified by:
sendMessage
in interfaceChannelInterceptor
- Overrides:
sendMessage
in classChannelInterceptorBase
- Parameters:
destination
- Member[] - the destination for this messagemsg
- ChannelMessage - the message to be sentpayload
- InterceptorPayload - the payload, carrying an error handler and future useful data, can be null- Throws:
ChannelException
- if a serialization error happens.- See Also:
-
messageReceived
Description copied from interface:ChannelInterceptor
themessageReceived
is invoked when a message is received.ChannelMessage.getAddress()
is the sender, or the reply-to address if it has been overwritten.- Specified by:
messageReceived
in interfaceChannelInterceptor
- Overrides:
messageReceived
in classChannelInterceptorBase
- Parameters:
msg
- ChannelMessage
-
processLeftOvers
-
processIncoming
- Parameters:
order
- MessageOrder- Returns:
- boolean - true if a message expired and was processed
-
memberAdded
Description copied from interface:MembershipListener
A member was added to the group- Specified by:
memberAdded
in interfaceMembershipListener
- Overrides:
memberAdded
in classChannelInterceptorBase
- Parameters:
member
- Member - the member that was added
-
memberDisappeared
Description copied from interface:MembershipListener
A member was removed from the group
If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data- Specified by:
memberDisappeared
in interfaceMembershipListener
- Overrides:
memberDisappeared
in classChannelInterceptorBase
- Parameters:
member
- Member- See Also:
-
incCounter
-
getInCounter
-
getOutCounter
-
setExpire
public void setExpire(long expire) -
setForwardExpired
public void setForwardExpired(boolean forwardExpired) -
setMaxQueue
public void setMaxQueue(int maxQueue) -
getExpire
public long getExpire() -
getForwardExpired
public boolean getForwardExpired() -
getMaxQueue
public int getMaxQueue()
-