Class FragmentationInterceptor

  • All Implemented Interfaces:
    ChannelInterceptor, FragmentationInterceptorMBean, Heartbeat, MembershipListener

    public class FragmentationInterceptor
    extends ChannelInterceptorBase
    implements FragmentationInterceptorMBean
    The fragmentation interceptor splits up large messages into smaller messages and assembles them on the other end. This is very useful when you don't want large messages hogging the sending sockets and smaller messages can make it through.
    Configuration Options
    FragmentationInterceptor.expire=<milliseconds> - how long do we keep the fragments in memory and wait for the rest to arrive default=60,000ms -> 60seconds This setting is useful to avoid OutOfMemoryErrors
    FragmentationInterceptor.maxSize=<max message size> - message size in bytes default=1024*100 (around a tenth of a MB)
    • Constructor Detail

      • FragmentationInterceptor

        public FragmentationInterceptor()
        Creates a new FragmentationInterceptor instance.
    • Method Detail

      • sendMessage

        public void sendMessage​(Member[] destination,
                                ChannelMessage msg,
                                InterceptorPayload payload)
                         throws ChannelException
        Description copied from interface: ChannelInterceptor
        The sendMessage 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 invoking getNext().sendMessage(destination,msg,payload).

        Alternatively the interceptor can stop the message from being sent by not invoking getNext().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 interface ChannelInterceptor
        Overrides:
        sendMessage in class ChannelInterceptorBase
        Parameters:
        destination - Member[] - the destination for this message
        msg - ChannelMessage - the message to be sent
        payload - InterceptorPayload - the payload, carrying an error handler and future useful data, can be null
        Throws:
        ChannelException - if a serialization error happens.
        See Also:
        ErrorHandler, InterceptorPayload
      • removeFragCollection

        public void removeFragCollection​(FragmentationInterceptor.FragKey key)
        Removes the fragment collection for the given key.
        Parameters:
        key - The fragment key to remove
      • defrag

        public void defrag​(ChannelMessage msg)
        Reassembles a fragmented message from its parts.
        Parameters:
        msg - The channel message fragment to process
      • frag

        public void frag​(Member[] destination,
                         ChannelMessage msg,
                         InterceptorPayload payload)
                  throws ChannelException
        Fragments a large message into smaller pieces and sends them.
        Parameters:
        destination - The destination members
        msg - The channel message to fragment
        payload - The interceptor payload
        Throws:
        ChannelException - if an error occurs during fragmentation