org.springframework.messaging.simp.stomp

## Class StompClientSupport

- java.lang.Object
- - org.springframework.messaging.simp.stomp.StompClientSupport

Direct Known Subclasses:
  ReactorNettyTcpStompClient

    public abstract class StompClientSupport
    extends Object

Base class for STOMP client implementations.

Subclasses can connect over WebSocket or TCP using any library. When creating a new connection, a subclass can create an instance of @link DefaultStompSession} which extends `TcpConnectionHandler` whose lifecycle methods the subclass must then invoke.

In effect, `TcpConnectionHandler` and `TcpConnection` are the contracts that any subclass must adapt to while using `StompEncoder` and `StompDecoder` to encode and decode STOMP messages.

Since:
  4.2
Author:
  Rossen Stoyanchev

### Constructor Summary

Constructors
Constructor and Description
`StompClientSupport()`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected ConnectionHandlingStompSession` `createSession(StompHeaders connectHeaders, StompSessionHandler handler)` Factory method for create and configure a new session.
`long[]` `getDefaultHeartbeat()` Return the configured default heart-beat value (never `null`).
`MessageConverter` `getMessageConverter()` Return the configured `MessageConverter`.
`long` `getReceiptTimeLimit()` Return the configured receipt time limit.
`org.springframework.scheduling.TaskScheduler` `getTaskScheduler()` The configured TaskScheduler.
`boolean` `isDefaultHeartbeatEnabled()` Determine whether heartbeats are enabled.
`protected StompHeaders` `processConnectHeaders(StompHeaders connectHeaders)` Further initialize the StompHeaders, for example setting the heart-beat header if necessary.
`void` `setDefaultHeartbeat(long[] heartbeat)` Configure the default value for the "heart-beat" header of the STOMP CONNECT frame.
`void` `setMessageConverter(MessageConverter messageConverter)` Set the `MessageConverter` to use to convert the payload of incoming and outgoing messages to and from `byte[]` based on object type and the "content-type" header.
`void` `setReceiptTimeLimit(long receiptTimeLimit)` Configure the number of milliseconds before a receipt is considered expired.
`void` `setTaskScheduler(org.springframework.scheduling.TaskScheduler taskScheduler)` Configure a scheduler to use for heartbeats and for receipt tracking.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### StompClientSupport

    public StompClientSupport()

### Method Detail

#### setMessageConverter

    public void setMessageConverter(MessageConverter messageConverter)

Set the `MessageConverter` to use to convert the payload of incoming and outgoing messages to and from `byte[]` based on object type and the "content-type" header.

By default, `SimpleMessageConverter` is configured.

Parameters:
  `messageConverter` - the message converter to use

#### getMessageConverter

    public MessageConverter getMessageConverter()

Return the configured `MessageConverter`.

#### setTaskScheduler

    public void setTaskScheduler(@Nullable
                                 org.springframework.scheduling.TaskScheduler taskScheduler)

Configure a scheduler to use for heartbeats and for receipt tracking.

Note: Some transports have built-in support to work with heartbeats and therefore do not require a TaskScheduler. Receipts however, if needed, do require a TaskScheduler to be configured.

By default, this is not set.

#### getTaskScheduler

    @Nullable
    public org.springframework.scheduling.TaskScheduler getTaskScheduler()

The configured TaskScheduler.

#### setDefaultHeartbeat

    public void setDefaultHeartbeat(long[] heartbeat)

Configure the default value for the "heart-beat" header of the STOMP CONNECT frame. The first number represents how often the client will write or send a heart-beat. The second is how often the server should write. A value of 0 means no heart-beats.

By default this is set to "10000,10000" but subclasses may override that default and for example set it to "0,0" if they require a TaskScheduler to be configured first.

Parameters:
  `heartbeat` - the value for the CONNECT "heart-beat" header
See Also:
  https://stomp.github.io/stomp-specification-1.2.html#Heart-beating

#### getDefaultHeartbeat

    public long[] getDefaultHeartbeat()

Return the configured default heart-beat value (never `null`).

#### isDefaultHeartbeatEnabled

    public boolean isDefaultHeartbeatEnabled()

Determine whether heartbeats are enabled.

Returns `false` if `defaultHeartbeat` is set to "0,0", and `true` otherwise.

#### setReceiptTimeLimit

    public void setReceiptTimeLimit(long receiptTimeLimit)

Configure the number of milliseconds before a receipt is considered expired.

By default set to 15,000 (15 seconds).

#### getReceiptTimeLimit

    public long getReceiptTimeLimit()

Return the configured receipt time limit.

#### createSession

    protected ConnectionHandlingStompSession createSession(@Nullable
                                                           StompHeaders connectHeaders,
                                                           StompSessionHandler handler)

Factory method for create and configure a new session.

Parameters:
  `connectHeaders` - headers for the STOMP CONNECT frame
  `handler` - the handler for the STOMP session
Returns:
  the created session

#### processConnectHeaders

    protected StompHeaders processConnectHeaders(@Nullable
                                                 StompHeaders connectHeaders)

Further initialize the StompHeaders, for example setting the heart-beat header if necessary.

Parameters:
  `connectHeaders` - the headers to modify
Returns:
  the modified headers