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 TypeMethodDescriptiondefault void
finishLock
(String lockToken) Update the status of the lock to indicate the associated process is complete.obtainLock
(org.springframework.messaging.Message<?> message, String 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 themessageLockTtl
.void
releaseLock
(String lockToken) Releases the lock so that the relevant message can be processed again.
-
Method Details
-
obtainLock
- Parameters:
message
- The message that is to be lockedlistenerName
- 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
- Throws:
ResourceLockException
- if the completionStatus is already met.FailedTakeoverException
- if a takeover attempt was unsuccessful as a result of stagnationThreshold not being met. Takeover may be attempted again. Only applies if takeovers are enabled. seeMessageLockProperties.getTakeover()
.
-
releaseLock
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
-
finishLock
Update the status of the lock to indicate the associated process is complete.- Parameters:
lockToken
- The unique token that was provided when the lock was obtained
-
purgeLocks
Deprecated.in favor ofpurgeLocks(Duration, Set)
Deletes all message locks that are out of date according to themessageLockTtl
.- 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
Deletes all message locks that are out of date according to themessageLockTtl
. By default, this method always deletes the locks that haveJpaResourceLock.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.
-
purgeLocks(Duration, Set)