private class StompBrokerRelayMessageHandler.StompConnectionHandler extends java.lang.Object implements TcpConnectionHandler<byte[]>
Modifier and Type | Field and Description |
---|---|
private StompHeaderAccessor |
connectHeaders |
private boolean |
isRemoteClientSession |
private boolean |
isStompConnected |
private java.lang.String |
sessionId |
private TcpConnection<byte[]> |
tcpConnection |
Modifier | Constructor and Description |
---|---|
private |
StompConnectionHandler(java.lang.String sessionId,
StompHeaderAccessor connectHeaders) |
private |
StompConnectionHandler(java.lang.String sessionId,
StompHeaderAccessor connectHeaders,
boolean isClientSession) |
Modifier and Type | Method and Description |
---|---|
void |
afterConnected(TcpConnection<byte[]> connection)
Invoked after a connection is successfully established.
|
void |
afterConnectFailure(java.lang.Throwable ex)
Invoked on failure to connect.
|
void |
afterConnectionClosed()
Invoked after the connection is closed.
|
private void |
afterDisconnectSent(StompHeaderAccessor accessor)
After a DISCONNECT there should be no more client frames so we can
close the connection pro-actively.
|
protected void |
afterStompConnected(StompHeaderAccessor connectedHeaders)
Invoked after the STOMP CONNECTED frame is received.
|
void |
clearConnection()
Clean up state associated with the connection and close it.
|
ListenableFuture<java.lang.Void> |
forward(Message<?> message,
StompHeaderAccessor accessor)
Forward the given message to the STOMP broker.
|
java.lang.String |
getSessionId() |
protected TcpConnection<byte[]> |
getTcpConnection() |
void |
handleFailure(java.lang.Throwable ex)
Handle a failure on the connection.
|
protected void |
handleInboundMessage(Message<?> message) |
void |
handleMessage(Message<byte[]> message)
Handle a message received from the remote host.
|
protected void |
handleTcpConnectionFailure(java.lang.String error,
java.lang.Throwable ex)
Invoked when any TCP connectivity issue is detected, i.e.
|
private void |
initHeartbeats(StompHeaderAccessor connectedHeaders) |
private void |
sendStompErrorFrameToClient(java.lang.String errorText) |
java.lang.String |
toString() |
private final java.lang.String sessionId
private final boolean isRemoteClientSession
private final StompHeaderAccessor connectHeaders
private volatile TcpConnection<byte[]> tcpConnection
private volatile boolean isStompConnected
private StompConnectionHandler(java.lang.String sessionId, StompHeaderAccessor connectHeaders)
private StompConnectionHandler(java.lang.String sessionId, StompHeaderAccessor connectHeaders, boolean isClientSession)
public java.lang.String getSessionId()
protected TcpConnection<byte[]> getTcpConnection()
public void afterConnected(TcpConnection<byte[]> connection)
TcpConnectionHandler
afterConnected
in interface TcpConnectionHandler<byte[]>
connection
- the connectionpublic void afterConnectFailure(java.lang.Throwable ex)
TcpConnectionHandler
afterConnectFailure
in interface TcpConnectionHandler<byte[]>
ex
- the exceptionprotected void handleTcpConnectionFailure(java.lang.String error, java.lang.Throwable ex)
private void sendStompErrorFrameToClient(java.lang.String errorText)
protected void handleInboundMessage(Message<?> message)
public void handleMessage(Message<byte[]> message)
TcpConnectionHandler
handleMessage
in interface TcpConnectionHandler<byte[]>
message
- the messageprotected void afterStompConnected(StompHeaderAccessor connectedHeaders)
private void initHeartbeats(StompHeaderAccessor connectedHeaders)
public void handleFailure(java.lang.Throwable ex)
TcpConnectionHandler
handleFailure
in interface TcpConnectionHandler<byte[]>
ex
- the exceptionpublic void afterConnectionClosed()
TcpConnectionHandler
afterConnectionClosed
in interface TcpConnectionHandler<byte[]>
public ListenableFuture<java.lang.Void> forward(Message<?> message, StompHeaderAccessor accessor)
The method checks whether we have an active TCP connection and have received the STOMP CONNECTED frame. For client messages this should be false only if we lose the TCP connection around the same time when a client message is being forwarded, so we simply log the ignored message at debug level. For messages from within the application being sent on the "system" connection an exception is raised so that components sending the message have a chance to handle it -- by default the broker message channel is synchronous.
Note that if messages arrive concurrently around the same time a TCP connection is lost, there is a brief period of time before the connection is reset when one or more messages may sneak through and an attempt made to forward them. Rather than synchronizing to guard against that, this method simply lets them try and fail. For client sessions that may result in an additional STOMP ERROR frame(s) being sent downstream but code handling that downstream should be idempotent in such cases.
message
- the message to send (never null
)private void afterDisconnectSent(StompHeaderAccessor accessor)
public void clearConnection()
public java.lang.String toString()
toString
in class java.lang.Object