Class GossipRouter

  • All Implemented Interfaces:
    ConnectionListener, Receiver, DiagnosticsHandler.ProbeHandler

    public class GossipRouter
    extends ReceiverAdapter
    implements ConnectionListener, DiagnosticsHandler.ProbeHandler
    Router for TCP based group comunication (using layer TCP instead of UDP). Instead of the TCP layer sending packets point-to-point to each other member, it sends the packet to the router which - depending on the target address - multicasts or unicasts it to the group / or single member.

    This class is especially interesting for applets which cannot directly make connections (neither UDP nor TCP) to a host different from the one they were loaded from. Therefore, an applet would create a normal channel plus protocol stack, but the bottom layer would have to be the TCP layer which sends all packets point-to-point (over a TCP connection) to the router, which in turn forwards them to their end location(s) (also over TCP). A centralized router would therefore have to be running on the host the applet was loaded from.

    An alternative for running JGroups in an applet (IP multicast is not allows in applets as of 1.2), is to use point-to-point UDP communication via the gossip server. However, then the appplet has to be signed which involves additional administrative effort on the part of the user.

    Note that a GossipRouter is also a good way of running JGroups in Amazon's EC2 environment which (as of summer 09) doesn't support IP multicasting.

    Since:
    2.1.1
    Author:
    Bela Ban, Vladimir Blagojevic, Ovidiu Feodorov
    • Field Detail

      • bind_addr

        protected java.net.InetAddress bind_addr
      • port

        protected int port
      • expiry_time

        protected long expiry_time
      • reaper_interval

        protected long reaper_interval
      • linger_timeout

        protected int linger_timeout
      • recv_buf_size

        protected int recv_buf_size
      • jmx

        protected boolean jmx
      • use_nio

        protected boolean use_nio
      • emit_suspect_events

        protected boolean emit_suspect_events
      • max_length

        protected int max_length
      • running

        protected final java.util.concurrent.atomic.AtomicBoolean running
      • log

        protected final Log log
      • tls

        protected TLS tls
      • non_blocking_sends

        protected boolean non_blocking_sends
      • max_send_queue

        protected int max_send_queue
      • address_mappings

        protected final java.util.Map<java.lang.String,​java.util.concurrent.ConcurrentMap<Address,​GossipRouter.Entry>> address_mappings
      • MSG_CONSUMER

        protected static final java.util.function.BiConsumer<java.lang.Short,​Message> MSG_CONSUMER
    • Constructor Detail

      • GossipRouter

        public GossipRouter​(java.lang.String bind_addr,
                            int local_port)
                     throws java.lang.Exception
        Throws:
        java.lang.Exception
      • GossipRouter

        public GossipRouter​(java.net.InetAddress bind_addr,
                            int local_port)
                     throws java.lang.Exception
        Throws:
        java.lang.Exception
    • Method Detail

      • localAddress

        public Address localAddress()
      • bindAddress

        public java.lang.String bindAddress()
      • bindAddress

        public GossipRouter bindAddress​(java.net.InetAddress addr)
      • port

        public int port()
      • expiryTime

        public long expiryTime()
      • reaperInterval

        public long reaperInterval()
      • reaperInterval

        public GossipRouter reaperInterval​(long t)
      • lingerTimeout

        public int lingerTimeout()
      • lingerTimeout

        public GossipRouter lingerTimeout​(int t)
      • recvBufferSize

        public int recvBufferSize()
      • recvBufferSize

        public GossipRouter recvBufferSize​(int s)
      • jmx

        public boolean jmx()
      • useNio

        public boolean useNio()
      • emitSuspectEvents

        public boolean emitSuspectEvents()
      • emitSuspectEvents

        public GossipRouter emitSuspectEvents​(boolean flag)
      • dumpMessages

        public GossipRouter dumpMessages​(boolean d)
      • maxLength

        public int maxLength()
      • tls

        public TLS tls()
      • nonBlockingSends

        public boolean nonBlockingSends()
      • nonBlockingSends

        public GossipRouter nonBlockingSends​(boolean b)
      • maxSendQueue

        public int maxSendQueue()
      • maxSendQueue

        public GossipRouter maxSendQueue​(int s)
      • running

        public boolean running()
      • numRegisteredClusters

        public int numRegisteredClusters()
      • numRegisteredClients

        public int numRegisteredClients()
      • init

        public GossipRouter init()
                          throws java.lang.Exception
        Throws:
        java.lang.Exception
      • start

        public GossipRouter start()
                           throws java.lang.Exception
        Lifecycle operation. Called after create(). When this method is called, the managed attributes have already been set.
        Brings the Router into a fully functional state.
        Throws:
        java.lang.Exception
      • stop

        public void stop()
        Always called before destroy(). Close connections and frees resources.
      • dumpRoutingTable

        public java.lang.String dumpRoutingTable()
      • dumpAddressMappings

        public java.lang.String dumpAddressMappings()
      • receive

        public void receive​(Address sender,
                            byte[] buf,
                            int offset,
                            int length)
        Description copied from interface: Receiver
        Delivers a message from a given sender to the application
        Specified by:
        receive in interface Receiver
        Overrides:
        receive in class ReceiverAdapter
        Parameters:
        sender - The sender of the message
        buf - The buffer. An application typically de-serializes data from the buffer into objects used by the application. Note that when receive() returns, it is not safe to use the buffer any longer; if an application needs to use a buffer after this callback returns, it must make a copy.
        offset - The offset at which the received data starts
        length - The length of the received data
      • receive

        public void receive​(Address sender,
                            java.nio.ByteBuffer buf)
        Description copied from interface: Receiver
        Delivers a message from a given sender to the application
        Specified by:
        receive in interface Receiver
        Parameters:
        sender - The sender of the message
        buf - The buffer. An application typically de-serializes data from the buffer into objects used by the application. Note that when receive() returns, it is not safe to use the buffer any longer; if an application needs to use a buffer after this callback returns, it must make a copy.

        Note that buf could be a direct ByteBuffer.

      • receive

        public void receive​(Address sender,
                            java.io.DataInput in,
                            int length)
                     throws java.lang.Exception
        Description copied from interface: Receiver
        Receive data from the given sender
        Specified by:
        receive in interface Receiver
        Parameters:
        sender - The sender
        in - The data input from which to read
        length - The number of bytes to read
        Throws:
        java.lang.Exception
      • handleProbe

        public java.util.Map<java.lang.String,​java.lang.String> handleProbe​(java.lang.String... keys)
        Description copied from interface: DiagnosticsHandler.ProbeHandler
        Handles a probe. For each key that is handled, the key and its result should be in the returned map.
        Specified by:
        handleProbe in interface DiagnosticsHandler.ProbeHandler
        Returns:
        Map. A map of keys and values. A null return value is permissible.
      • handleHeartbeat

        protected void handleHeartbeat​(Address sender)
      • handleRegister

        protected void handleRegister​(Address sender,
                                      java.io.DataInput in)
      • handleUnregister

        protected void handleUnregister​(java.io.DataInput in)
      • handleGetMembersRequest

        protected void handleGetMembersRequest​(Address sender,
                                               java.io.DataInput in)
      • dump

        protected static void dump​(GossipData data)
      • readRequest

        protected GossipData readRequest​(java.io.DataInput in)
      • addAddressMapping

        protected void addAddressMapping​(Address sender,
                                         java.lang.String group,
                                         Address addr,
                                         PhysicalAddress phys_addr,
                                         java.lang.String logical_name)
      • removeAddressMapping

        protected void removeAddressMapping​(java.lang.String group,
                                            Address addr)
      • removeFromAddressMappings

        protected void removeFromAddressMappings​(Address client_addr)
      • route

        protected void route​(java.lang.String group,
                             Address dest,
                             byte[] msg,
                             int offset,
                             int length)
      • route

        protected void route​(java.lang.String group,
                             Address dest,
                             java.nio.ByteBuffer buf)
      • sendToAllMembersInGroup

        protected void sendToAllMembersInGroup​(java.util.Set<java.util.Map.Entry<Address,​GossipRouter.Entry>> dests,
                                               byte[] buf,
                                               int offset,
                                               int len)
      • sendToAllMembersInGroup

        protected void sendToAllMembersInGroup​(java.util.Set<java.util.Map.Entry<Address,​GossipRouter.Entry>> dests,
                                               java.nio.ByteBuffer buf)
      • sendToMember

        protected void sendToMember​(Address dest,
                                    java.nio.ByteBuffer buf)
      • sendToMember

        protected void sendToMember​(Address dest,
                                    byte[] buf,
                                    int offset,
                                    int len)
      • main

        public static void main​(java.lang.String[] args)
                         throws java.lang.Exception
        Throws:
        java.lang.Exception