Package org.jgroups.stack
Class GossipRouter
- java.lang.Object
-
- org.jgroups.blocks.cs.ReceiverAdapter
-
- org.jgroups.stack.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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classGossipRouter.DumpMessagesprotected static classGossipRouter.Entrystatic classGossipRouter.TLSClientAuth
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Map<java.lang.String,java.util.concurrent.ConcurrentMap<Address,GossipRouter.Entry>>address_mappingsprotected intbacklogprotected java.net.InetAddressbind_addrprotected DiagnosticsHandlerdiagprotected GossipRouter.DumpMessagesdump_msgsprotected booleanemit_suspect_eventsprotected longexpiry_timeprotected booleanjmxprotected longlinger_timeoutprotected Loglogprotected intmax_lengthprotected static java.util.function.BiConsumer<java.lang.Short,Message>MSG_CONSUMERprotected java.util.Map<Address,ByteArrayDataOutputStream>output_streamsprotected intportprotected intrecv_buf_sizeprotected java.util.concurrent.atomic.AtomicBooleanrunningprotected BaseServerserverprotected longsock_read_timeoutprotected SocketFactorysocket_factoryprotected ThreadFactorythread_factoryprotected java.util.Timertimerprotected booleanuse_nio
-
Constructor Summary
Constructors Constructor Description GossipRouter(java.lang.String bind_addr, int local_port)GossipRouter(java.net.InetAddress bind_addr, int local_port)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddAddressMapping(Address sender, java.lang.String group, Address addr, PhysicalAddress phys_addr, java.lang.String logical_name)intbacklog()GossipRouterbacklog(int backlog)java.lang.StringbindAddress()GossipRouterbindAddress(java.net.InetAddress addr)voidconnectionClosed(Connection conn)voidconnectionEstablished(Connection conn)DiagnosticsHandlerdiagHandler()protected static voiddump(GossipData data)java.lang.StringdumpAddressMappings()GossipRouter.DumpMessagesdumpMessages()GossipRouterdumpMessages(boolean d)GossipRouterdumpMessages(GossipRouter.DumpMessages flag)java.lang.StringdumpRoutingTable()booleanemitSuspectEvents()GossipRouteremitSuspectEvents(boolean flag)longexpiryTime()GossipRouterexpiryTime(long t)protected ByteArrayDataOutputStreamgetOutputStream(Address mbr, int size)protected voidhandleGetMembersRequest(Address sender, java.io.DataInput in)protected voidhandleHeartbeat(Address sender)java.util.Map<java.lang.String,java.lang.String>handleProbe(java.lang.String... keys)Handles a probe.protected voidhandleRegister(Address sender, java.io.DataInput in)protected voidhandleUnregister(java.io.DataInput in)(package private) static voidhelp()GossipRouterinit()booleanjmx()GossipRouterjmx(boolean flag)longlingerTimeout()GossipRouterlingerTimeout(long t)AddresslocalAddress()static voidmain(java.lang.String[] args)intmaxLength()GossipRoutermaxLength(int len)intnumRegisteredClients()intnumRegisteredClusters()intport()GossipRouterport(int port)private voidprintStartupInfo()Prints startup information.protected GossipDatareadRequest(java.io.DataInput in)protected GossipDatareadRequest(java.io.DataInput in, GossipType type)voidreceive(Address sender, byte[] buf, int offset, int length)Delivers a message from a given sender to the applicationvoidreceive(Address sender, java.io.DataInput in)voidreceive(Address sender, java.nio.ByteBuffer buf)Delivers a message from a given sender to the applicationintrecvBufferSize()GossipRouterrecvBufferSize(int s)protected voidremoveAddressMapping(java.lang.String group, Address addr)protected voidremoveFromAddressMappings(Address client_addr)protected voidroute(java.lang.String group, Address dest, byte[] msg, int offset, int length)protected voidroute(java.lang.String group, Address dest, java.nio.ByteBuffer buf)booleanrunning()protected voidsendToAllMembersInGroup(java.util.Set<java.util.Map.Entry<Address,GossipRouter.Entry>> dests, byte[] buf, int offset, int len)protected voidsendToAllMembersInGroup(java.util.Set<java.util.Map.Entry<Address,GossipRouter.Entry>> dests, java.nio.ByteBuffer buf)protected voidsendToAllMembersInGroup(java.util.Set<java.util.Map.Entry<Address,GossipRouter.Entry>> dests, GossipData request)protected voidsendToMember(Address dest, byte[] buf, int offset, int len)protected voidsendToMember(Address dest, java.nio.ByteBuffer buf)protected voidsendToMember(Address dest, GossipData request)SocketFactorysocketFactory()GossipRoutersocketFactory(SocketFactory sf)longsocketReadTimeout()GossipRoutersocketReadTimeout(long t)GossipRouterstart()Lifecycle operation.voidstop()Always called before destroy().java.lang.String[]supportedKeys()Returns a list of supported keysThreadFactorythreadPoolFactory()GossipRouterthreadPoolFactory(ThreadFactory f)booleanuseNio()GossipRouteruseNio(boolean flag)
-
-
-
Field Detail
-
bind_addr
protected java.net.InetAddress bind_addr
-
port
protected int port
-
expiry_time
protected long expiry_time
-
linger_timeout
protected long linger_timeout
-
sock_read_timeout
protected long sock_read_timeout
-
thread_factory
protected ThreadFactory thread_factory
-
socket_factory
protected SocketFactory socket_factory
-
backlog
protected int backlog
-
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 java.util.concurrent.atomic.AtomicBoolean running
-
timer
protected java.util.Timer timer
-
log
protected final Log log
-
diag
protected DiagnosticsHandler diag
-
address_mappings
protected final java.util.Map<java.lang.String,java.util.concurrent.ConcurrentMap<Address,GossipRouter.Entry>> address_mappings
-
output_streams
protected final java.util.Map<Address,ByteArrayDataOutputStream> output_streams
-
MSG_CONSUMER
protected static final java.util.function.BiConsumer<java.lang.Short,Message> MSG_CONSUMER
-
-
Method Detail
-
localAddress
public Address localAddress()
-
bindAddress
public java.lang.String bindAddress()
-
bindAddress
public GossipRouter bindAddress(java.net.InetAddress addr)
-
port
public int port()
-
port
public GossipRouter port(int port)
-
expiryTime
public long expiryTime()
-
expiryTime
public GossipRouter expiryTime(long t)
-
lingerTimeout
public long lingerTimeout()
-
lingerTimeout
public GossipRouter lingerTimeout(long t)
-
socketReadTimeout
public long socketReadTimeout()
-
socketReadTimeout
public GossipRouter socketReadTimeout(long 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)
-
backlog
public int backlog()
-
backlog
public GossipRouter backlog(int backlog)
-
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()
-
running
public boolean running()
-
numRegisteredClusters
public int numRegisteredClusters()
-
numRegisteredClients
public int numRegisteredClients()
-
init
public GossipRouter init()
-
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:ReceiverDelivers a message from a given sender to the application- Specified by:
receivein interfaceReceiver- Overrides:
receivein classReceiverAdapter- Parameters:
sender- The sender of the messagebuf- 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 startslength- The length of the received data
-
receive
public void receive(Address sender, java.nio.ByteBuffer buf)
Description copied from interface:ReceiverDelivers a message from a given sender to the application- Specified by:
receivein interfaceReceiver- Parameters:
sender- The sender of the messagebuf- 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) throws java.lang.Exception
- Specified by:
receivein interfaceReceiver- Overrides:
receivein classReceiverAdapter- 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.ProbeHandlerHandles a probe. For each key that is handled, the key and its result should be in the returned map.- Specified by:
handleProbein interfaceDiagnosticsHandler.ProbeHandler- Returns:
- Map
. A map of keys and values. A null return value is permissible.
-
supportedKeys
public java.lang.String[] supportedKeys()
Description copied from interface:DiagnosticsHandler.ProbeHandlerReturns a list of supported keys- Specified by:
supportedKeysin interfaceDiagnosticsHandler.ProbeHandler
-
getOutputStream
protected ByteArrayDataOutputStream getOutputStream(Address mbr, int size)
-
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)
-
connectionClosed
public void connectionClosed(Connection conn)
- Specified by:
connectionClosedin interfaceConnectionListener
-
connectionEstablished
public void connectionEstablished(Connection conn)
- Specified by:
connectionEstablishedin interfaceConnectionListener
-
readRequest
protected GossipData readRequest(java.io.DataInput in)
-
readRequest
protected GossipData readRequest(java.io.DataInput in, GossipType type)
-
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, GossipData request)
-
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, GossipData request)
-
sendToMember
protected void sendToMember(Address dest, java.nio.ByteBuffer buf)
-
sendToMember
protected void sendToMember(Address dest, byte[] buf, int offset, int len)
-
printStartupInfo
private void printStartupInfo()
Prints startup information.
-
main
public static void main(java.lang.String[] args) throws java.lang.Exception- Throws:
java.lang.Exception
-
help
static void help()
-
-