Class MetadataStoreSelector

All Implemented Interfaces:
GenericSelector<Message<?>>, MessageSelector

public class MetadataStoreSelector extends Object implements MessageSelector
The 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.

Artem Bilan, Gary Russell, Christian Tzolov