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) |
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 boolean accept(Message<?> message)
accept in interface GenericSelector<Message<?>>accept in interface MessageSelector