Class SimpleMessageStore
java.lang.Object
org.springframework.integration.store.AbstractBatchingMessageGroupStore
org.springframework.integration.store.AbstractMessageGroupStore
org.springframework.integration.store.SimpleMessageStore
- All Implemented Interfaces:
Iterable<MessageGroup>
,BasicMessageGroupStore
,ChannelMessageStore
,MessageGroupStore
,MessageStore
public class SimpleMessageStore
extends AbstractMessageGroupStore
implements MessageStore, ChannelMessageStore
Map-based in-memory implementation of
MessageStore
and MessageGroupStore
.
Enforces a maximum capacity for the store.- Since:
- 2.0
- Author:
- Iwein Fuld, Mark Fisher, Dave Syer, Oleg Zhurakousky, Gary Russell, Ryan Barker, Artem Bilan
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.springframework.integration.store.MessageGroupStore
MessageGroupStore.MessageGroupCallback
-
Field Summary
Fields inherited from class org.springframework.integration.store.AbstractMessageGroupStore
logger
-
Constructor Summary
ConstructorDescriptionCreate a SimpleMessageStore with unlimited capacity.SimpleMessageStore
(int capacity) Creates a SimpleMessageStore with the same capacity for individual and grouped messages.SimpleMessageStore
(int individualCapacity, int groupCapacity) Creates a SimpleMessageStore with a maximum size limited by the given capacity, or unlimited size if the given capacity is less than 1.SimpleMessageStore
(int individualCapacity, int groupCapacity, long upperBoundTimeout) Create a SimpleMessageStore with a maximum size limited by the given capacity and the timeout in millisecond to wait for the empty slot in the store.SimpleMessageStore
(int individualCapacity, int groupCapacity, long upperBoundTimeout, LockRegistry lockRegistry) Creates a SimpleMessageStore with a maximum size limited by the given capacity, the timeout in millisecond to wait for the empty slot in the store and LockRegistry for the message group operations concurrency.SimpleMessageStore
(int individualCapacity, int groupCapacity, LockRegistry lockRegistry) Creates a SimpleMessageStore with a maximum size limited by the given capacity and LockRegistry for the message group operations concurrency. -
Method Summary
Modifier and TypeMethodDescription<T> Message<T>
addMessage
(Message<T> message) Put the provided Message into the MessageStore.void
addMessagesToGroup
(Object groupId, Message<?>... messages) Store messages with an association to a group id.void
clearMessageGroup
(Object groupId) void
completeGroup
(Object groupId) Completes this MessageGroup.protected MessageGroup
copy
(MessageGroup group) Used by expireMessageGroups.getGroupMetadata
(Object groupId) Obtain the group metadata without fetching any messages; must supply all other group properties; may include the id of the first message.Message<?>
getMessage
(UUID key) long
Optional attribute giving the number of messages in the store.Message<?>
getMessageFromGroup
(Object groupId, UUID messageId) Retrieve aMessage
from a group by id.getMessageGroup
(Object groupId) Return all Messages currently in the MessageStore that were stored usingBasicMessageGroupStore.addMessageToGroup(Object, Message)
with this group id.Collection<Message<?>>
getMessagesForGroup
(Object groupId) Retrieve messages for the provided group id.Message<?>
getOneMessageFromGroup
(Object groupId) Return the oneMessage
fromMessageGroup
.iterator()
int
messageGroupSize
(Object groupId) Return the size of this MessageGroup.Message<?>
pollMessageFromGroup
(Object groupId) Poll Message from thisMessageGroup
(in FIFO style if supported by the implementation) while also removing the polledMessage
.Message<?>
removeMessage
(UUID key) Remove the Message with the given id from the MessageStore, if present, and return it.boolean
removeMessageFromGroupById
(Object groupId, UUID messageId) Deletion the message from the group.void
removeMessageGroup
(Object groupId) Remove the message group with this id.void
removeMessagesFromGroup
(Object groupId, Collection<Message<?>> messages) Persist the deletion of messages from the group.void
setCopyOnGet
(boolean copyOnGet) Set as false to disable copying the group ingetMessageGroup(Object)
.void
setGroupCondition
(Object groupId, String condition) Add a condition sentence into the group.void
setLastReleasedSequenceNumberForGroup
(Object groupId, int sequenceNumber) Allows you to set the sequence number of the last released Message.void
setLazyLoadMessageGroups
(boolean lazyLoadMessageGroups) Specify if the result of theBasicMessageGroupStore.getMessageGroup(Object)
should be wrapped to thePersistentMessageGroup
- a lazy-load proxy for messages in group Defaults totrue
.void
setLockRegistry
(LockRegistry lockRegistry) Methods inherited from class org.springframework.integration.store.AbstractMessageGroupStore
addMessageToGroup, expireMessageGroups, getMessageCountForAllMessageGroups, getMessageGroupCount, getMessageGroupFactory, isTimeoutOnIdle, registerMessageGroupExpiryCallback, removeMessagesFromGroup, setExpiryCallbacks, setTimeoutOnIdle
Methods inherited from class org.springframework.integration.store.AbstractBatchingMessageGroupStore
getRemoveBatchSize, setMessageGroupFactory, setRemoveBatchSize
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.integration.store.BasicMessageGroupStore
addMessageToGroup
Methods inherited from interface java.lang.Iterable
forEach, spliterator
Methods inherited from interface org.springframework.integration.store.MessageGroupStore
streamMessagesForGroup
-
Constructor Details
-
SimpleMessageStore
public SimpleMessageStore(int individualCapacity, int groupCapacity) Creates a SimpleMessageStore with a maximum size limited by the given capacity, or unlimited size if the given capacity is less than 1. The capacities are applied independently to messages stored viaaddMessage(Message)
and to those stored viaAbstractMessageGroupStore.addMessageToGroup(Object, Message)
. In both cases the capacity applies to the number of messages that can be stored, and once that limit is reached attempting to store another will result in an exception.- Parameters:
individualCapacity
- The message capacity.groupCapacity
- The capacity of each group.
-
SimpleMessageStore
public SimpleMessageStore(int individualCapacity, int groupCapacity, long upperBoundTimeout) Create a SimpleMessageStore with a maximum size limited by the given capacity and the timeout in millisecond to wait for the empty slot in the store.- Parameters:
individualCapacity
- The message capacity.groupCapacity
- The capacity of each group.upperBoundTimeout
- The time to wait if the store is at max capacity.- Since:
- 4.3
- See Also:
-
SimpleMessageStore
Creates a SimpleMessageStore with a maximum size limited by the given capacity and LockRegistry for the message group operations concurrency.- Parameters:
individualCapacity
- The message capacity.groupCapacity
- The capacity of each group.lockRegistry
- The lock registry.- See Also:
-
SimpleMessageStore
public SimpleMessageStore(int individualCapacity, int groupCapacity, long upperBoundTimeout, LockRegistry lockRegistry) Creates a SimpleMessageStore with a maximum size limited by the given capacity, the timeout in millisecond to wait for the empty slot in the store and LockRegistry for the message group operations concurrency.- Parameters:
individualCapacity
- The message capacity.groupCapacity
- The capacity of each group.upperBoundTimeout
- The time to wait if the store is at max capacitylockRegistry
- The lock registry.- Since:
- 4.3
-
SimpleMessageStore
public SimpleMessageStore(int capacity) Creates a SimpleMessageStore with the same capacity for individual and grouped messages.- Parameters:
capacity
- The capacity.
-
SimpleMessageStore
public SimpleMessageStore()Create a SimpleMessageStore with unlimited capacity.
-
-
Method Details
-
setCopyOnGet
public void setCopyOnGet(boolean copyOnGet) Set as false to disable copying the group ingetMessageGroup(Object)
. Starting with 4.1, this is false by default.- Parameters:
copyOnGet
- True to copy, false to not.- Since:
- 4.0.1
-
setLockRegistry
-
setLazyLoadMessageGroups
public void setLazyLoadMessageGroups(boolean lazyLoadMessageGroups) Description copied from class:AbstractMessageGroupStore
Specify if the result of theBasicMessageGroupStore.getMessageGroup(Object)
should be wrapped to thePersistentMessageGroup
- a lazy-load proxy for messages in group Defaults totrue
.The target logic is based on the
SimpleMessageGroupFactory.GroupType.PERSISTENT
.- Overrides:
setLazyLoadMessageGroups
in classAbstractMessageGroupStore
- Parameters:
lazyLoadMessageGroups
- theboolean
flag to use.
-
getMessageCount
Description copied from interface:MessageStore
Optional attribute giving the number of messages in the store. Implementations may decline to respond by throwing an exception.- Specified by:
getMessageCount
in interfaceMessageStore
- Returns:
- The number of messages.
-
addMessage
Description copied from interface:MessageStore
Put the provided Message into the MessageStore. The store may need to mutate the message internally, and if it does then the return value can be different than the input. The id of the return value will be used as an index so that theMessageStore.getMessage(UUID)
andMessageStore.removeMessage(UUID)
behave properly. Since messages are immutable, putting the same message more than once is a no-op.- Specified by:
addMessage
in interfaceMessageStore
- Type Parameters:
T
- The payload type.- Parameters:
message
- The message.- Returns:
- The message that was stored.
-
getMessage
- Specified by:
getMessage
in interfaceMessageStore
- Parameters:
key
- The message identifier.- Returns:
- The Message with the given id, or null if no Message with that id exists in the MessageStore.
-
getMessageMetadata
Description copied from interface:MessageStore
- Specified by:
getMessageMetadata
in interfaceMessageStore
- Parameters:
id
- The message identifier.- Returns:
- The MessageMetadata with the given id, or null if no Message with that id exists in the MessageStore or the message has no metadata (legacy message from an earlier version).
-
removeMessage
Description copied from interface:MessageStore
Remove the Message with the given id from the MessageStore, if present, and return it. If no Message with that id is present in the store, this will returnnull
. If this method is implemented on aMessageGroupStore
, the message is removed from the store only if no groups holding this message.- Specified by:
removeMessage
in interfaceMessageStore
- Parameters:
key
- the message identifier.- Returns:
- the message (if any).
-
getMessageGroup
Description copied from interface:BasicMessageGroupStore
Return all Messages currently in the MessageStore that were stored usingBasicMessageGroupStore.addMessageToGroup(Object, Message)
with this group id.- Specified by:
getMessageGroup
in interfaceBasicMessageGroupStore
- Parameters:
groupId
- The group identifier.- Returns:
- A group of messages, empty if none exists for this key.
-
copy
Description copied from class:AbstractMessageGroupStore
Used by expireMessageGroups. We need to return a snapshot of the group at the time the reaper runs, so we can properly detect if the group changed between now and the attempt to expire the group. Not necessary for persistent stores, so the default behavior is to just return the group.- Overrides:
copy
in classAbstractMessageGroupStore
- Parameters:
group
- The group.- Returns:
- The group, or a copy.
-
addMessagesToGroup
Description copied from interface:MessageGroupStore
Store messages with an association to a group id. This can be used to group messages together.- Specified by:
addMessagesToGroup
in interfaceMessageGroupStore
- Parameters:
groupId
- The group id to store messages under.messages
- The messages to add.
-
removeMessageGroup
Description copied from interface:BasicMessageGroupStore
Remove the message group with this id.- Specified by:
removeMessageGroup
in interfaceBasicMessageGroupStore
- Parameters:
groupId
- The id of the group to remove.
-
removeMessagesFromGroup
Description copied from interface:MessageGroupStore
Persist the deletion of messages from the group.- Specified by:
removeMessagesFromGroup
in interfaceMessageGroupStore
- Parameters:
groupId
- The groupId for the group containing the message(s).messages
- The messages to be removed.
-
getMessageFromGroup
Description copied from interface:MessageGroupStore
Retrieve aMessage
from a group by id. Returnnull
if message does not belong to the requested group.- Specified by:
getMessageFromGroup
in interfaceMessageGroupStore
- Parameters:
groupId
- The groupId for the group containing the message.messageId
- The message id.- Returns:
- message by id if it belongs to requested group.
-
removeMessageFromGroupById
Description copied from interface:MessageGroupStore
Deletion the message from the group.- Specified by:
removeMessageFromGroupById
in interfaceMessageGroupStore
- Parameters:
groupId
- The groupId for the group containing the message.messageId
- The message id to be removed.- Returns:
- true if message has been removed.
-
iterator
- Specified by:
iterator
in interfaceIterable<MessageGroup>
- Specified by:
iterator
in interfaceMessageGroupStore
- Returns:
- The iterator of currently accumulated
MessageGroup
s.
-
setGroupCondition
Description copied from interface:MessageGroupStore
Add a condition sentence into the group. Can be used later on for making some decisions for group, e.g. release strategy for correlation handler can consult this condition instead of iterating all the messages in group.- Specified by:
setGroupCondition
in interfaceMessageGroupStore
- Parameters:
groupId
- The group identifier.condition
- The condition to store into the group.
-
setLastReleasedSequenceNumberForGroup
Description copied from interface:MessageGroupStore
Allows you to set the sequence number of the last released Message. Used for Resequencing use cases- Specified by:
setLastReleasedSequenceNumberForGroup
in interfaceMessageGroupStore
- Parameters:
groupId
- The group identifier.sequenceNumber
- The sequence number.
-
completeGroup
Description copied from interface:MessageGroupStore
Completes this MessageGroup. Completion of the MessageGroup generally means that this group should not be allowing anymore mutating operation to be performed on it. For example any attempt to add/remove new Message form the group should not be allowed.- Specified by:
completeGroup
in interfaceMessageGroupStore
- Parameters:
groupId
- The group identifier.
-
pollMessageFromGroup
Description copied from interface:BasicMessageGroupStore
Poll Message from thisMessageGroup
(in FIFO style if supported by the implementation) while also removing the polledMessage
.- Specified by:
pollMessageFromGroup
in interfaceBasicMessageGroupStore
- Parameters:
groupId
- The group identifier.- Returns:
- The message.
-
messageGroupSize
Description copied from interface:BasicMessageGroupStore
Return the size of this MessageGroup.- Specified by:
messageGroupSize
in interfaceBasicMessageGroupStore
- Parameters:
groupId
- The group identifier.- Returns:
- The size.
-
getGroupMetadata
Description copied from interface:MessageGroupStore
Obtain the group metadata without fetching any messages; must supply all other group properties; may include the id of the first message.- Specified by:
getGroupMetadata
in interfaceMessageGroupStore
- Overrides:
getGroupMetadata
in classAbstractMessageGroupStore
- Parameters:
groupId
- The group id.- Returns:
- The metadata.
-
getOneMessageFromGroup
Description copied from interface:MessageGroupStore
Return the oneMessage
fromMessageGroup
.- Specified by:
getOneMessageFromGroup
in interfaceMessageGroupStore
- Parameters:
groupId
- The group identifier.- Returns:
- the
Message
.
-
getMessagesForGroup
Description copied from interface:MessageGroupStore
Retrieve messages for the provided group id.- Specified by:
getMessagesForGroup
in interfaceMessageGroupStore
- Parameters:
groupId
- The group id to retrieve messages for.- Returns:
- the messages for group.
-
clearMessageGroup
-