Interface MessageLockService

All Known Implementing Classes:
DefaultMessageLockService

public interface MessageLockService
Service that is responsible for managing locks for the processing of a Message. These locks are leveraged by the IdempotentMessageConsumptionService to ensure that a message is only processed once per listener.
Author:
Chris Kittrell (ckittrell)
  • Method Summary

    Modifier and Type
    Method
    Description
    obtainLock(org.springframework.messaging.Message<?> message, String listenerName)
    Creates a JpaResourceLock based on the contents of the provided Message and listenerName.
    default void
    purgeLocks(Duration messageLockTtl)
    Deprecated.
    default void
    purgeLocks(Duration messageLockTtl, Set<String> additionalLockTypes)
    Deletes all message locks that are out of date according to the messageLockTtl.
    void
    releaseLock(String lockToken)
    Releases the lock so that the relevant message can be processed again.
  • Method Details

    • obtainLock

      String obtainLock(org.springframework.messaging.Message<?> message, String listenerName)
      Creates a JpaResourceLock based on the contents of the provided Message and listenerName.
      Parameters:
      message - The message that is to be locked
      listenerName - The name of the message listener. This value can be used to distinguish this message consumption from that of a different message listener.
      Returns:
      A unique token that can later be used to release the lock
    • releaseLock

      void releaseLock(@Nullable String lockToken)
      Releases the lock so that the relevant message can be processed again. We primarily want to use this method when an unexpected error is encountered while processing the message.
      Parameters:
      lockToken - The unique token that was provided when the lock was obtained
    • purgeLocks

      @Deprecated default void purgeLocks(Duration messageLockTtl)
      Deprecated.
      Deletes all message locks that are out of date according to the messageLockTtl.
      Parameters:
      messageLockTtl - How long the lock should be held. If the lock is too old, then it should be removed.
      Throws:
      UnsupportedOperationException - if this is not otherwise implemented.
    • purgeLocks

      default void purgeLocks(Duration messageLockTtl, Set<String> additionalLockTypes)
      Deletes all message locks that are out of date according to the messageLockTtl. By default, this method always deletes the locks that have JpaResourceLock.getTypeAlias() equal to "Message".
      Parameters:
      messageLockTtl - How long the lock should be held. If the lock is too old, then it should be removed.
      additionalLockTypes - Additional types of locks to be removed.
      Throws:
      UnsupportedOperationException - if this or delegate is not otherwise implemented.