org.springframework.messaging.simp.stomp

## Class StompClientSupport

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

- Direct Known Subclasses:
    ReactorNettyTcpStompClient, WebSocketStompClient

      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 `DefaultStompSession` which implements `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
    Modifier and Type | Method and Description
    --- | ---
    `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.
    `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(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
                                       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 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.

      Note: that a heartbeat is sent only in case of inactivity, i.e. when no other messages are sent. This can present a challenge when using an external broker since messages with a non-broker destination represent activity but aren't actually forwarded to the broker. In that case you can configure a `TaskScheduler` through the `StompBrokerRelayRegistration` which ensures a heartbeat is forwarded to the broker also when only messages with a non-broker destination are sent.

      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