Class TcpTransport
- java.lang.Object
-
- org.apache.activemq.util.ServiceSupport
-
- org.apache.activemq.transport.TransportSupport
-
- org.apache.activemq.transport.TransportThreadSupport
-
- org.apache.activemq.transport.tcp.TcpTransport
-
- Direct Known Subclasses:
AmqpNioTransport
,MQTTNIOTransport
,NIOTransport
,SslTransport
,StompNIOTransport
public class TcpTransport extends TransportThreadSupport implements Transport, Service, Runnable
An implementation of theTransport
interface using raw tcp/ip
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
TcpTransport.InitBuffer
-
Field Summary
Fields Modifier and Type Field Description protected TimeStampStream
buffOut
protected boolean
closeAsync
protected int
connectionTimeout
protected DataInputStream
dataIn
protected DataOutputStream
dataOut
protected boolean
diffServChosen
Prevents setting both the Differentiated Services and Type of Service transport options at the same time, since they share the same spot in the TCP/IP packet headers.protected boolean
dynamicManagement
Specifies if the TransportLogger will be manageable by JMX or not.protected TcpTransport.InitBuffer
initBuffer
protected int
ioBufferSize
protected int
jmxPort
Specifies the port that will be used by the JMX server to manage the TransportLoggers.protected URI
localLocation
protected String
logWriterName
Name of the LogWriter implementation to use.protected int
minmumWireFormatVersion
protected int
receiveCounter
protected URI
remoteLocation
protected Socket
socket
protected int
socketBufferSize
protected SocketFactory
socketFactory
protected Map<String,Object>
socketOptions
protected int
soTimeout
protected boolean
startLogging
startLogging=true -> the TransportLogger object of the Transport stack will initially write messages to the log.protected AtomicReference<CountDownLatch>
stoppedLatch
protected boolean
trace
trace=true -> the Transport stack where this TcpTransport object will be, will have a TransportLogger layer trace=false -> the Transport stack where this TcpTransport object will be, will NOT have a TransportLogger layer, and therefore will never be able to print logging messages.protected int
trafficClass
The Traffic Class to be set on the socket.protected boolean
typeOfServiceChosen
protected boolean
useLocalHost
protected WireFormat
wireFormat
-
Constructor Summary
Constructors Constructor Description TcpTransport(WireFormat wireFormat, Socket socket)
Initialize from a server SocketTcpTransport(WireFormat wireFormat, Socket socket, TcpTransport.InitBuffer initBuffer)
TcpTransport(WireFormat wireFormat, SocketFactory socketFactory, URI remoteLocation, URI localLocation)
Connect to a remote Node - e.g.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
closeStreams()
protected void
connect()
protected void
doRun()
protected void
doStart()
protected void
doStop(ServiceStopper stopper)
int
getConnectionTimeout()
String
getDiffServ()
int
getIoBufferSize()
int
getJmxPort()
Boolean
getKeepAlive()
String
getLogWriterName()
int
getMinmumWireFormatVersion()
X509Certificate[]
getPeerCertificates()
int
getReceiveCounter()
Returns a counter which gets incremented as data is read from the transport.String
getRemoteAddress()
int
getSocketBufferSize()
int
getSoLinger()
int
getSoTimeout()
Boolean
getTcpNoDelay()
int
getTypeOfService()
WireFormat
getWireFormat()
Retrieves the WireFormat instance associated with this Transport instance.protected void
initialiseSocket(Socket sock)
Configures the socket for useprotected void
initializeStreams()
boolean
isCloseAsync()
boolean
isDynamicManagement()
boolean
isStartLogging()
boolean
isTrace()
boolean
isUseLocalHost()
<T> T
narrow(Class<T> target)
narrow acceptancevoid
oneway(Object command)
A one way asynchronous sendprotected Object
readCommand()
protected String
resolveHostName(String host)
void
run()
reads packets from a Socketvoid
setCloseAsync(boolean closeAsync)
void
setConnectionTimeout(int connectionTimeout)
Sets the timeout used to connect to the socketvoid
setDiffServ(String diffServ)
void
setDynamicManagement(boolean useJmx)
void
setIoBufferSize(int ioBufferSize)
void
setJmxPort(int jmxPort)
void
setKeepAlive(Boolean keepAlive)
Enable/disable TCP KEEP_ALIVE modevoid
setLogWriterName(String logFormat)
void
setMinmumWireFormatVersion(int minmumWireFormatVersion)
void
setPeerCertificates(X509Certificate[] certificates)
Sets the certificates provided by the connected peer.void
setSocketBufferSize(int socketBufferSize)
Sets the buffer size to use on the socketvoid
setSocketOptions(Map<String,Object> socketOptions)
void
setSoLinger(int soLinger)
Enable/disable soLingervoid
setSoTimeout(int soTimeout)
Sets the socket timeoutvoid
setStartLogging(boolean startLogging)
void
setTcpNoDelay(Boolean tcpNoDelay)
Enable/disable the TCP_NODELAY option on the socketvoid
setTrace(boolean trace)
void
setTypeOfService(int typeOfService)
void
setUseLocalHost(boolean useLocalHost)
Sets whether 'localhost' or the actual local host name should be used to make local connections.void
stop()
Override so that stop() blocks until the run thread is no longer running.String
toString()
-
Methods inherited from class org.apache.activemq.transport.TransportThreadSupport
getStackSize, isDaemon, setDaemon, setStackSize
-
Methods inherited from class org.apache.activemq.transport.TransportSupport
asyncRequest, checkStarted, doConsume, getTransportListener, isConnected, isDisposed, isFaultTolerant, isReconnectSupported, isUpdateURIsSupported, onException, reconnect, request, request, setTransportListener, updateURIs
-
Methods inherited from class org.apache.activemq.util.ServiceSupport
addServiceListener, dispose, isStarted, isStopped, isStopping, postStop, preStart, removeServiceListener, start
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.activemq.transport.Transport
asyncRequest, getTransportListener, isConnected, isDisposed, isFaultTolerant, isReconnectSupported, isUpdateURIsSupported, reconnect, request, request, setTransportListener, updateURIs
-
-
-
-
Field Detail
-
remoteLocation
protected final URI remoteLocation
-
localLocation
protected final URI localLocation
-
wireFormat
protected final WireFormat wireFormat
-
connectionTimeout
protected int connectionTimeout
-
soTimeout
protected int soTimeout
-
socketBufferSize
protected int socketBufferSize
-
ioBufferSize
protected int ioBufferSize
-
closeAsync
protected boolean closeAsync
-
socket
protected Socket socket
-
dataOut
protected DataOutputStream dataOut
-
dataIn
protected DataInputStream dataIn
-
buffOut
protected TimeStampStream buffOut
-
initBuffer
protected final TcpTransport.InitBuffer initBuffer
-
trafficClass
protected int trafficClass
The Traffic Class to be set on the socket.
-
diffServChosen
protected boolean diffServChosen
Prevents setting both the Differentiated Services and Type of Service transport options at the same time, since they share the same spot in the TCP/IP packet headers.
-
typeOfServiceChosen
protected boolean typeOfServiceChosen
-
trace
protected boolean trace
trace=true -> the Transport stack where this TcpTransport object will be, will have a TransportLogger layer trace=false -> the Transport stack where this TcpTransport object will be, will NOT have a TransportLogger layer, and therefore will never be able to print logging messages. This parameter is most probably set in Connection or TransportConnector URIs.
-
logWriterName
protected String logWriterName
Name of the LogWriter implementation to use. Names are mapped to classes in the resources/META-INF/services/org/apache/activemq/transport/logwriters directory. This parameter is most probably set in Connection or TransportConnector URIs.
-
dynamicManagement
protected boolean dynamicManagement
Specifies if the TransportLogger will be manageable by JMX or not. Also, as long as there is at least 1 TransportLogger which is manageable, a TransportLoggerControl MBean will me created.
-
startLogging
protected boolean startLogging
startLogging=true -> the TransportLogger object of the Transport stack will initially write messages to the log. startLogging=false -> the TransportLogger object of the Transport stack will initially NOT write messages to the log. This parameter only has an effect if trace == true. This parameter is most probably set in Connection or TransportConnector URIs.
-
jmxPort
protected int jmxPort
Specifies the port that will be used by the JMX server to manage the TransportLoggers. This should only be set in an URI by a client (producer or consumer) since a broker will already create a JMX server. It is useful for people who test a broker and clients in the same machine and want to control both via JMX; a different port will be needed.
-
useLocalHost
protected boolean useLocalHost
-
minmumWireFormatVersion
protected int minmumWireFormatVersion
-
socketFactory
protected SocketFactory socketFactory
-
stoppedLatch
protected final AtomicReference<CountDownLatch> stoppedLatch
-
receiveCounter
protected volatile int receiveCounter
-
-
Constructor Detail
-
TcpTransport
public TcpTransport(WireFormat wireFormat, SocketFactory socketFactory, URI remoteLocation, URI localLocation) throws UnknownHostException, IOException
Connect to a remote Node - e.g. a Broker- Parameters:
wireFormat
-socketFactory
-remoteLocation
-localLocation
- - e.g. local InetAddress and local port- Throws:
IOException
UnknownHostException
-
TcpTransport
public TcpTransport(WireFormat wireFormat, Socket socket) throws IOException
Initialize from a server Socket- Parameters:
wireFormat
-socket
-- Throws:
IOException
-
TcpTransport
public TcpTransport(WireFormat wireFormat, Socket socket, TcpTransport.InitBuffer initBuffer) throws IOException
- Throws:
IOException
-
-
Method Detail
-
oneway
public void oneway(Object command) throws IOException
A one way asynchronous send- Specified by:
oneway
in interfaceTransport
- Throws:
IOException
-
toString
public String toString()
-
doRun
protected void doRun() throws IOException
- Throws:
IOException
-
readCommand
protected Object readCommand() throws IOException
- Throws:
IOException
-
getDiffServ
public String getDiffServ()
-
setDiffServ
public void setDiffServ(String diffServ) throws IllegalArgumentException
- Throws:
IllegalArgumentException
-
getTypeOfService
public int getTypeOfService()
-
setTypeOfService
public void setTypeOfService(int typeOfService)
-
isTrace
public boolean isTrace()
-
setTrace
public void setTrace(boolean trace)
-
getLogWriterName
public String getLogWriterName()
-
setLogWriterName
public void setLogWriterName(String logFormat)
-
isDynamicManagement
public boolean isDynamicManagement()
-
setDynamicManagement
public void setDynamicManagement(boolean useJmx)
-
isStartLogging
public boolean isStartLogging()
-
setStartLogging
public void setStartLogging(boolean startLogging)
-
getJmxPort
public int getJmxPort()
-
setJmxPort
public void setJmxPort(int jmxPort)
-
getMinmumWireFormatVersion
public int getMinmumWireFormatVersion()
-
setMinmumWireFormatVersion
public void setMinmumWireFormatVersion(int minmumWireFormatVersion)
-
isUseLocalHost
public boolean isUseLocalHost()
-
setUseLocalHost
public void setUseLocalHost(boolean useLocalHost)
Sets whether 'localhost' or the actual local host name should be used to make local connections. On some operating systems such as Macs its not possible to connect as the local host name so localhost is better.
-
getSocketBufferSize
public int getSocketBufferSize()
-
setSocketBufferSize
public void setSocketBufferSize(int socketBufferSize)
Sets the buffer size to use on the socket
-
getSoTimeout
public int getSoTimeout()
-
setSoTimeout
public void setSoTimeout(int soTimeout)
Sets the socket timeout
-
getConnectionTimeout
public int getConnectionTimeout()
-
setConnectionTimeout
public void setConnectionTimeout(int connectionTimeout)
Sets the timeout used to connect to the socket
-
getKeepAlive
public Boolean getKeepAlive()
-
setKeepAlive
public void setKeepAlive(Boolean keepAlive)
Enable/disable TCP KEEP_ALIVE mode
-
setSoLinger
public void setSoLinger(int soLinger)
Enable/disable soLinger- Parameters:
soLinger
- enabled if > -1, disabled if == -1, system default otherwise
-
getSoLinger
public int getSoLinger()
-
getTcpNoDelay
public Boolean getTcpNoDelay()
-
setTcpNoDelay
public void setTcpNoDelay(Boolean tcpNoDelay)
Enable/disable the TCP_NODELAY option on the socket
-
getIoBufferSize
public int getIoBufferSize()
- Returns:
- the ioBufferSize
-
setIoBufferSize
public void setIoBufferSize(int ioBufferSize)
- Parameters:
ioBufferSize
- the ioBufferSize to set
-
isCloseAsync
public boolean isCloseAsync()
- Returns:
- the closeAsync
-
setCloseAsync
public void setCloseAsync(boolean closeAsync)
- Parameters:
closeAsync
- the closeAsync to set
-
resolveHostName
protected String resolveHostName(String host) throws UnknownHostException
- Throws:
UnknownHostException
-
initialiseSocket
protected void initialiseSocket(Socket sock) throws SocketException, IllegalArgumentException
Configures the socket for use- Parameters:
sock
- the socket- Throws:
SocketException
IllegalArgumentException
-
doStart
protected void doStart() throws Exception
- Overrides:
doStart
in classTransportThreadSupport
- Throws:
Exception
-
doStop
protected void doStop(ServiceStopper stopper) throws Exception
- Specified by:
doStop
in classServiceSupport
- Throws:
Exception
-
stop
public void stop() throws Exception
Override so that stop() blocks until the run thread is no longer running.- Specified by:
stop
in interfaceService
- Overrides:
stop
in classServiceSupport
- Throws:
Exception
-
closeStreams
protected void closeStreams() throws IOException
- Throws:
IOException
-
getRemoteAddress
public String getRemoteAddress()
- Specified by:
getRemoteAddress
in interfaceTransport
- Returns:
- the remote address for this connection
-
narrow
public <T> T narrow(Class<T> target)
Description copied from class:TransportSupport
narrow acceptance- Specified by:
narrow
in interfaceTransport
- Overrides:
narrow
in classTransportSupport
- Returns:
- 'this' if assignable
-
getReceiveCounter
public int getReceiveCounter()
Description copied from interface:Transport
Returns a counter which gets incremented as data is read from the transport. It should only be used to determine if there is progress being made in reading the next command from the transport. The value may wrap into the negative numbers.- Specified by:
getReceiveCounter
in interfaceTransport
- Returns:
- a counter which gets incremented as data is read from the transport.
-
getWireFormat
public WireFormat getWireFormat()
Description copied from interface:Transport
Retrieves the WireFormat instance associated with this Transport instance.- Specified by:
getWireFormat
in interfaceTransport
- Returns:
- the WireFormat in use.
-
getPeerCertificates
public X509Certificate[] getPeerCertificates()
- Specified by:
getPeerCertificates
in interfaceTransport
- Returns:
- the Certificates provided by the peer, or null if not a secure channel.
-
setPeerCertificates
public void setPeerCertificates(X509Certificate[] certificates)
Description copied from interface:Transport
Sets the certificates provided by the connected peer.- Specified by:
setPeerCertificates
in interfaceTransport
- Parameters:
certificates
- the Certificates provided by the peer.
-
-