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
  • Field Details

    • bind_addr

      protected 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
    • thread_factory

      protected ThreadFactory thread_factory
    • socket_factory

      protected SocketFactory socket_factory
    • 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
    • dump_msgs

      protected GossipRouter.DumpMessages dump_msgs
    • max_length

      protected int max_length
    • server

      protected BaseServer server
    • running

      protected final AtomicBoolean running
    • log

      protected final Log log
    • diag

      protected DiagnosticsHandler diag
    • tls

      protected TLS tls
    • non_blocking_sends

      protected boolean non_blocking_sends
    • max_send_queue

      protected int max_send_queue
    • address_mappings

      protected final Map<String,ConcurrentMap<Address,GossipRouter.Entry>> address_mappings
    • output_streams

      protected final Map<Address,ByteArrayDataOutputStream> output_streams
    • MSG_CONSUMER

      protected static final BiConsumer<Short,Message> MSG_CONSUMER
  • Constructor Details

  • Method Details

    • localAddress

      public Address localAddress()
    • bindAddress

      public String bindAddress()
    • bindAddress

      public GossipRouter bindAddress(InetAddress addr)
    • port

      public int port()
    • port

      public GossipRouter port(int port)
    • expiryTime

      public long expiryTime()
    • expiryTime

      public GossipRouter expiryTime(long t)
    • 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)
    • threadPoolFactory

      public ThreadFactory threadPoolFactory()
    • threadPoolFactory

      public GossipRouter threadPoolFactory(ThreadFactory f)
    • socketFactory

      public SocketFactory socketFactory()
    • socketFactory

      public GossipRouter socketFactory(SocketFactory sf)
    • jmx

      public boolean jmx()
    • jmx

      public GossipRouter jmx(boolean flag)
    • useNio

      public boolean useNio()
    • useNio

      public GossipRouter useNio(boolean flag)
    • emitSuspectEvents

      public boolean emitSuspectEvents()
    • emitSuspectEvents

      public GossipRouter emitSuspectEvents(boolean flag)
    • dumpMessages

      public GossipRouter.DumpMessages dumpMessages()
    • dumpMessages

      public GossipRouter dumpMessages(GossipRouter.DumpMessages flag)
    • dumpMessages

      public GossipRouter dumpMessages(boolean d)
    • maxLength

      public int maxLength()
    • maxLength

      public GossipRouter maxLength(int len)
    • diagHandler

      public DiagnosticsHandler diagHandler()
    • tls

      public TLS tls()
    • tls

      public GossipRouter tls(TLS t)
    • 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 Exception
      Throws:
      Exception
    • start

      public GossipRouter start() throws 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:
      Exception
    • stop

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

      public String dumpRoutingTable()
    • dumpAddressMappings

      public 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, 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, DataInput in, int length) throws 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:
      Exception
    • handleProbe

      public Map<String,String> handleProbe(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:
      A map of keys and values. A null return value is permissible.
    • supportedKeys

      public String[] supportedKeys()
      Description copied from interface: DiagnosticsHandler.ProbeHandler
      Returns a list of supported keys
      Specified by:
      supportedKeys in interface DiagnosticsHandler.ProbeHandler
    • getOutputStream

      protected ByteArrayDataOutputStream getOutputStream(Address mbr, int size)
    • handleHeartbeat

      protected void handleHeartbeat(Address sender)
    • handleRegister

      protected void handleRegister(Address sender, DataInput in)
    • handleUnregister

      protected void handleUnregister(DataInput in)
    • handleGetMembersRequest

      protected void handleGetMembersRequest(Address sender, DataInput in)
    • dump

      protected static void dump(GossipData data)
    • connectionClosed

      public void connectionClosed(Connection conn)
      Specified by:
      connectionClosed in interface ConnectionListener
    • connectionEstablished

      public void connectionEstablished(Connection conn)
      Specified by:
      connectionEstablished in interface ConnectionListener
    • readRequest

      protected GossipData readRequest(DataInput in)
    • readRequest

      protected GossipData readRequest(DataInput in, GossipType type)
    • addAddressMapping

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

      protected void removeAddressMapping(String group, Address addr)
    • removeFromAddressMappings

      protected void removeFromAddressMappings(Address client_addr)
    • route

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

      protected void route(String group, Address dest, ByteBuffer buf)
    • sendToAllMembersInGroup

      protected void sendToAllMembersInGroup(Set<Map.Entry<Address,GossipRouter.Entry>> dests, GossipData request)
    • sendToAllMembersInGroup

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

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

      protected void sendToMember(Address dest, GossipData request)
    • sendToMember

      protected void sendToMember(Address dest, ByteBuffer buf)
    • sendToMember

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

      public static void main(String[] args) throws Exception
      Throws:
      Exception
    • help

      static void help()