public class MessageListenerAdapter extends Object implements InitializingBean, MessageListener
afterPropertiesSet()
after setting all the parameters on the adapter.
Note that if the underlying "delegate" is implementing MessageListener
, the adapter will delegate to it and
allow an invalid method to be specified. However if it is not, the method becomes mandatory. This lenient behavior
allows the adapter to be used uniformly across existing listeners and message POJOs.
Modeled as much as possible after the JMS MessageListenerAdapter in Spring Framework.
By default, the content of incoming Redis messages gets extracted before being passed into the target listener
method, to let the target method operate on message content types such as String or byte array instead of the raw
Message
. Message type conversion is delegated to a Spring Data RedisSerializer
. By default, the
JdkSerializationRedisSerializer
will be used. (If you do not want such automatic message conversion taking
place, then be sure to set the Serializer
to null
.)
Find below some examples of method signatures compliant with this adapter class. This first example handles all
Message
types and gets passed the contents of each Message
type as an argument.
public interface MessageContentsDelegate { void handleMessage(String text); void handleMessage(byte[] bytes); void handleMessage(Person obj); }
In addition, the channel or pattern to which a message is sent can be passed in to the method as a second argument of type String:
public interface MessageContentsDelegate { void handleMessage(String text, String channel); void handleMessage(byte[] bytes, String pattern); }For further examples and discussion please do refer to the Spring Data reference documentation which describes this class (and its attendant configuration) in detail. Important: Due to the nature of messages, the default serializer used by the adapter is
StringRedisSerializer
. If the messages are of a different type, change them
accordingly through setSerializer(RedisSerializer)
.MessageListenerAdapter
Modifier and Type | Field and Description |
---|---|
protected Log |
logger
Logger available to subclasses
|
static String |
ORIGINAL_DEFAULT_LISTENER_METHOD
Out-of-the-box value for the default listener method: "handleMessage".
|
Constructor and Description |
---|
MessageListenerAdapter()
Create a new
MessageListenerAdapter with default settings. |
MessageListenerAdapter(Object delegate)
Create a new
MessageListenerAdapter for the given delegate. |
MessageListenerAdapter(Object delegate,
String defaultListenerMethod)
Create a new
MessageListenerAdapter for the given delegate. |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet() |
protected Object |
extractMessage(Message message)
Extract the message body from the given Redis message.
|
protected String |
getDefaultListenerMethod()
Return the name of the default listener method to delegate to.
|
Object |
getDelegate()
Returns the target object to delegate message listening to.
|
protected String |
getListenerMethodName(Message originalMessage,
Object extractedMessage)
Determine the name of the listener method that is supposed to handle the given message.
|
protected void |
handleListenerException(Throwable ex)
Handle the given exception that arose during listener execution.
|
protected void |
initDefaultStrategies()
Initialize the default implementations for the adapter's strategies.
|
protected void |
invokeListenerMethod(String methodName,
Object[] arguments)
Invoke the specified listener method.
|
void |
onMessage(Message message,
byte[] pattern)
Standard Redis
MessageListener entry point. |
void |
setDefaultListenerMethod(String defaultListenerMethod)
Specify the name of the default listener method to delegate to, for the case where no specific listener method has
been determined.
|
void |
setDelegate(Object delegate)
Set a target object to delegate message listening to.
|
void |
setSerializer(RedisSerializer<?> serializer)
Set the serializer that will convert incoming raw Redis messages to listener method arguments.
|
void |
setStringSerializer(RedisSerializer<String> serializer)
Sets the serializer used for converting the channel/pattern to a String.
|
public static final String ORIGINAL_DEFAULT_LISTENER_METHOD
protected final Log logger
public MessageListenerAdapter()
MessageListenerAdapter
with default settings.public MessageListenerAdapter(Object delegate)
MessageListenerAdapter
for the given delegate.delegate
- the delegate objectpublic MessageListenerAdapter(Object delegate, String defaultListenerMethod)
MessageListenerAdapter
for the given delegate.delegate
- the delegate objectdefaultListenerMethod
- method to call when a message comesgetListenerMethodName(org.springframework.data.redis.connection.Message, java.lang.Object)
public void setDelegate(Object delegate)
If no explicit delegate object has been specified, listener methods are expected to present on this adapter instance, that is, on a custom subclass of this adapter, defining listener methods.
delegate
- delegate object@Nullable public Object getDelegate()
public void setDefaultListenerMethod(String defaultListenerMethod)
"handleMessage"
.protected String getDefaultListenerMethod()
public void setSerializer(RedisSerializer<?> serializer)
The default converter is a StringRedisSerializer
.
serializer
- public void setStringSerializer(RedisSerializer<String> serializer)
The default converter is a StringRedisSerializer
.
serializer
- public void afterPropertiesSet()
afterPropertiesSet
in interface InitializingBean
public void onMessage(Message message, @Nullable byte[] pattern)
MessageListener
entry point.
Delegates the message to the target listener method, with appropriate conversion of the message argument. In case
of an exception, the handleListenerException(Throwable)
method will be invoked.
onMessage
in interface MessageListener
message
- the incoming Redis messagepattern
- pattern matching the channel (if specified) - can be null.handleListenerException(java.lang.Throwable)
protected void initDefaultStrategies()
protected void handleListenerException(Throwable ex)
ex
- the exception to handleprotected Object extractMessage(Message message)
message
- the Redis Message
protected String getListenerMethodName(Message originalMessage, Object extractedMessage)
The default implementation simply returns the configured default listener method, if any.
originalMessage
- the Redis request messageextractedMessage
- the converted Redis request message, to be passed into the listener method as argumentnull
)setDefaultListenerMethod(java.lang.String)
protected void invokeListenerMethod(String methodName, Object[] arguments)
methodName
- the name of the listener methodarguments
- the message arguments to be passed ingetListenerMethodName(org.springframework.data.redis.connection.Message, java.lang.Object)
Copyright © 2011–2018 Pivotal Software, Inc.. All rights reserved.