public abstract class AbstractAdaptableMessageListener extends Object implements MessageListener, ChannelAwareMessageListener
MessageListener adapter providing the necessary infrastructure
to extract the payload of a MessageMessageListener,
ChannelAwareMessageListener| Modifier and Type | Field and Description |
|---|---|
protected org.apache.commons.logging.Log |
logger
Logger available to subclasses
|
| Constructor and Description |
|---|
AbstractAdaptableMessageListener() |
| Modifier and Type | Method and Description |
|---|---|
protected Message |
buildMessage(com.rabbitmq.client.Channel channel,
Object result)
Build a Rabbit message to be sent as response based on the given result object.
|
protected Object |
extractMessage(Message message)
Extract the message body from the given Rabbit message.
|
protected MessageConverter |
getMessageConverter()
Return the converter that will convert incoming Rabbit messages to listener method arguments, and objects
returned from listener methods back to Rabbit messages.
|
protected String |
getReceivedExchange(Message request) |
protected Address |
getReplyToAddress(Message request)
Determine a reply-to Address for the given message.
|
protected void |
handleListenerException(Throwable ex)
Handle the given exception that arose during listener execution.
|
protected void |
handleResult(Object result,
Message request,
com.rabbitmq.client.Channel channel)
Handle the given result object returned from the listener method, sending a response message back.
|
void |
onMessage(Message message)
Rabbit
MessageListener entry point. |
protected void |
postProcessChannel(com.rabbitmq.client.Channel channel,
Message response)
Post-process the given message before sending the response.
|
protected void |
postProcessResponse(Message request,
Message response)
Post-process the given response message before it will be sent.
|
protected void |
sendResponse(com.rabbitmq.client.Channel channel,
Address replyTo,
Message messageIn)
Send the given response message to the given destination.
|
void |
setEncoding(String encoding)
The encoding to use when inter-converting between byte arrays and Strings in message properties.
|
void |
setMandatoryPublish(boolean mandatoryPublish) |
void |
setMessageConverter(MessageConverter messageConverter)
Set the converter that will convert incoming Rabbit messages to listener method arguments, and objects returned
from listener methods back to Rabbit messages.
|
void |
setReplyPostProcessor(MessagePostProcessor replyPostProcessor)
Set a post processor to process the reply immediately before
Channel#basicPublish(). |
void |
setResponseExchange(String responseExchange)
Set the exchange to use when sending response messages.
|
void |
setResponseRoutingKey(String responseRoutingKey)
Set the routing key to use when sending response messages.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitonMessageprotected final org.apache.commons.logging.Log logger
public void setResponseRoutingKey(String responseRoutingKey)
Response destinations are only relevant for listener methods that return result objects, which will be wrapped in a response message and sent to a response destination.
responseRoutingKey - The routing key.public void setEncoding(String encoding)
encoding - the encoding to setpublic void setResponseExchange(String responseExchange)
Response destinations are only relevant for listener methods that return result objects, which will be wrapped in a response message and sent to a response destination.
responseExchange - The exchange.public void setMandatoryPublish(boolean mandatoryPublish)
public void setMessageConverter(MessageConverter messageConverter)
The default converter is a SimpleMessageConverter, which is able to handle "text" content-types.
messageConverter - The message converter.public void setReplyPostProcessor(MessagePostProcessor replyPostProcessor)
Channel#basicPublish().
Often used to compress the data.replyPostProcessor - the reply post processor.protected MessageConverter getMessageConverter()
public void onMessage(Message message)
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.
Note: Does not support sending response messages based on result objects returned from listener methods.
Use the ChannelAwareMessageListener entry point (typically through a Spring message listener container)
for handling result objects as well.
onMessage in interface MessageListenermessage - the incoming Rabbit messagehandleListenerException(java.lang.Throwable),
ChannelAwareMessageListener.onMessage(Message, com.rabbitmq.client.Channel)protected void handleListenerException(Throwable ex)
This method only applies when using a Rabbit MessageListener. With
ChannelAwareMessageListener, exceptions get handled by the
caller instead.
ex - the exception to handleonMessage(Message)protected Object extractMessage(Message message)
message - the Rabbit Messageprotected void handleResult(Object result, Message request, com.rabbitmq.client.Channel channel) throws Exception
result - the result object to handle (never null)request - the original request messagechannel - the Rabbit channel to operate on (may be null)Exception - if thrown by Rabbit API methodsbuildMessage(com.rabbitmq.client.Channel, java.lang.Object),
postProcessResponse(org.springframework.amqp.core.Message, org.springframework.amqp.core.Message),
getReplyToAddress(Message),
sendResponse(com.rabbitmq.client.Channel, org.springframework.amqp.core.Address, org.springframework.amqp.core.Message)protected Message buildMessage(com.rabbitmq.client.Channel channel, Object result) throws Exception
channel - the Rabbit Channel to operate onresult - the content of the message, as returned from the listener methodMessage (never null)Exception - if thrown by Rabbit API methodssetMessageConverter(org.springframework.amqp.support.converter.MessageConverter)protected void postProcessResponse(Message request, Message response) throws Exception
The default implementation sets the response's correlation id to the request message's correlation id, if any; otherwise to the request message id.
request - the original incoming Rabbit messageresponse - the outgoing Rabbit message about to be sentException - if thrown by Rabbit API methodsprotected Address getReplyToAddress(Message request) throws Exception
The default implementation first checks the Rabbit Reply-To Address of the supplied request; if that is not
null it is returned; if it is null, then the configured default response Exchange and
routing key are used to construct a reply-to Address. If the responseExchange property is also null,
then an AmqpException is thrown.
request - the original incoming Rabbit messagenull)Exception - if thrown by Rabbit API methodsAmqpException - if no Address can be determinedsetResponseExchange(String),
setResponseRoutingKey(String),
Message.getMessageProperties(),
MessageProperties.getReplyTo()protected void sendResponse(com.rabbitmq.client.Channel channel,
Address replyTo,
Message messageIn)
throws Exception
channel - the Rabbit channel to operate onreplyTo - the Rabbit ReplyTo string to use when sending. Currently interpreted to be the routing key.messageIn - the Rabbit message to sendException - if thrown by Rabbit API methodspostProcessResponse(Message, Message)protected void postProcessChannel(com.rabbitmq.client.Channel channel,
Message response)
throws Exception
The default implementation is empty.
channel - The channel.response - the outgoing Rabbit message about to be sentException - if thrown by Rabbit API methods