Class MetadataStoreSelector
- All Implemented Interfaces:
GenericSelector<Message<?>>
,MessageSelector
public class MetadataStoreSelector extends Object implements MessageSelector
MessageSelector
implementation using a ConcurrentMetadataStore
and MessageProcessor
.
The accept(org.springframework.messaging.Message<?>)
method extracts metadataKey
from the provided message
using MessageProcessor
and uses the timestamp
header as the value
(hex) by default. The valueStrategy
can be provided to override the default behaviour.
The successful result of the accept(org.springframework.messaging.Message<?>)
method is based on the
ConcurrentMetadataStore.putIfAbsent(java.lang.String, java.lang.String)
return value. true
is returned
if putIfAbsent
returns null
.
And, at the same time, it means that the value has been placed in the MetadataStore
.
Otherwise the messages isn't accepted because there is already a value in the
MetadataStore
associated with the key
.
This MessageSelector
is useful for an
Idempotent Receiver
implementation.
It can be used in a MessageFilter
or IdempotentReceiverInterceptor
.
- Since:
- 4.1
- Author:
- Artem Bilan, Gary Russell
-
Constructor Summary
Constructors Constructor Description MetadataStoreSelector(MessageProcessor<String> keyStrategy)
MetadataStoreSelector(MessageProcessor<String> keyStrategy, MessageProcessor<String> valueStrategy)
MetadataStoreSelector(MessageProcessor<String> keyStrategy, MessageProcessor<String> valueStrategy, ConcurrentMetadataStore metadataStore)
MetadataStoreSelector(MessageProcessor<String> keyStrategy, ConcurrentMetadataStore metadataStore)
-
Method Summary
Modifier and Type Method Description boolean
accept(Message<?> message)
MetadataStoreSelector
compareValues(BiPredicate<String,String> compareValues)
Fluent version ofsetCompareValues(BiPredicate)
.void
setCompareValues(BiPredicate<String,String> compareValues)
Set aBiPredicate
to compare old and new values in the metadata store for the key.
-
Constructor Details
-
MetadataStoreSelector
-
MetadataStoreSelector
public MetadataStoreSelector(MessageProcessor<String> keyStrategy, MessageProcessor<String> valueStrategy) -
MetadataStoreSelector
public MetadataStoreSelector(MessageProcessor<String> keyStrategy, ConcurrentMetadataStore metadataStore) -
MetadataStoreSelector
public MetadataStoreSelector(MessageProcessor<String> keyStrategy, MessageProcessor<String> valueStrategy, ConcurrentMetadataStore metadataStore)
-
-
Method Details
-
setCompareValues
Set aBiPredicate
to compare old and new values in the metadata store for the key. The first parameter is the old value; return true if we should accept this message and replace the old value with the new value.- Parameters:
compareValues
- theBiPredicate
.- Since:
- 5.3
-
compareValues
Fluent version ofsetCompareValues(BiPredicate)
.- Parameters:
compareValues
- theBiPredicate
.- Returns:
- this.
-
accept
- Specified by:
accept
in interfaceGenericSelector<Message<?>>
- Specified by:
accept
in interfaceMessageSelector
-