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
.
Constructor and Description |
---|
MetadataStoreSelector(MessageProcessor<String> keyStrategy) |
MetadataStoreSelector(MessageProcessor<String> keyStrategy,
ConcurrentMetadataStore metadataStore) |
MetadataStoreSelector(MessageProcessor<String> keyStrategy,
MessageProcessor<String> valueStrategy) |
MetadataStoreSelector(MessageProcessor<String> keyStrategy,
MessageProcessor<String> valueStrategy,
ConcurrentMetadataStore metadataStore) |
Modifier and Type | Method and Description |
---|---|
boolean |
accept(Message<?> message) |
MetadataStoreSelector |
compareValues(java.util.function.BiPredicate<String,String> compareValues)
Fluent version of
setCompareValues(BiPredicate) . |
void |
setCompareValues(java.util.function.BiPredicate<String,String> compareValues)
Set a
BiPredicate to compare old and new values in the metadata store for
the key. |
public MetadataStoreSelector(MessageProcessor<String> keyStrategy)
public MetadataStoreSelector(MessageProcessor<String> keyStrategy, MessageProcessor<String> valueStrategy)
public MetadataStoreSelector(MessageProcessor<String> keyStrategy, ConcurrentMetadataStore metadataStore)
public MetadataStoreSelector(MessageProcessor<String> keyStrategy, MessageProcessor<String> valueStrategy, ConcurrentMetadataStore metadataStore)
public void setCompareValues(@Nullable java.util.function.BiPredicate<String,String> compareValues)
BiPredicate
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.compareValues
- the BiPredicate
.public MetadataStoreSelector compareValues(@Nullable java.util.function.BiPredicate<String,String> compareValues)
setCompareValues(BiPredicate)
.compareValues
- the BiPredicate
.public boolean accept(Message<?> message)
accept
in interface GenericSelector<Message<?>>
accept
in interface MessageSelector