@Target(value={METHOD,ANNOTATION_TYPE}) @Retention(value=RUNTIME) @Documented @Repeatable(value=JmsListeners.class) @MessageMapping public @interface JmsListener
destination()
. The containerFactory()
identifies the
JmsListenerContainerFactory
to use to build
the JMS listener container. If not set, a default container factory is
assumed to be available with a bean name of jmsListenerContainerFactory
unless an explicit default has been provided through configuration.
Consider setting up a custom
DefaultJmsListenerContainerFactory
bean.
For production purposes, you'll typically fine-tune timeouts and recovery settings.
Most importantly, the default 'AUTO_ACKNOWLEDGE' mode does not provide reliability
guarantees, so make sure to use transacted sessions in case of reliability needs.
Processing of @JmsListener
annotations is performed by registering a
JmsListenerAnnotationBeanPostProcessor
. This can be done manually or,
more conveniently, through the <jms:annotation-driven/>
element or
@EnableJms
annotation.
Annotated JMS listener methods are allowed to have flexible signatures similar
to what MessageMapping
provides:
Session
to get access to the JMS sessionMessage
or one of its subclasses to get access to the raw JMS messageMessage
to use Spring's messaging abstraction counterpart@Payload
-annotated method
arguments, including support for validation@Header
-annotated method
arguments to extract specific header values, including standard JMS headers defined by
JmsHeaders
@Headers
-annotated
method argument that must also be assignable to Map
for obtaining
access to all headersMessageHeaders
arguments for obtaining
access to all headersMessageHeaderAccessor
or
JmsMessageHeaderAccessor
for convenient
access to all method argumentsAnnotated methods may have a non-void
return type. When they do,
the result of the method invocation is sent as a JMS reply to the destination
defined by the JMSReplyTO
header of the incoming message. If this header
is not set, a default destination can be provided by adding
@SendTo
to the
method declaration.
This annotation may be used as a meta-annotation to create custom composed annotations with attribute overrides.
EnableJms
,
JmsListenerAnnotationBeanPostProcessor
,
JmsListeners
Modifier and Type | Required Element and Description |
---|---|
java.lang.String |
destination
The destination name for this listener, resolved through the container-wide
DestinationResolver strategy. |
Modifier and Type | Optional Element and Description |
---|---|
java.lang.String |
concurrency
The concurrency limits for the listener, if any.
|
java.lang.String |
containerFactory
The bean name of the
JmsListenerContainerFactory
to use to create the message listener container responsible for serving this endpoint. |
java.lang.String |
id
The unique identifier of the container managing this endpoint.
|
java.lang.String |
selector
The JMS message selector expression, if any.
|
java.lang.String |
subscription
The name for the durable subscription, if any.
|
public abstract java.lang.String destination
DestinationResolver
strategy.public abstract java.lang.String id
If none is specified, an auto-generated one is provided.
public abstract java.lang.String containerFactory
JmsListenerContainerFactory
to use to create the message listener container responsible for serving this endpoint.
If not specified, the default container factory is used, if any.
public abstract java.lang.String subscription
public abstract java.lang.String selector
See the JMS specification for a detailed definition of selector expressions.
public abstract java.lang.String concurrency
The concurrency limits can be a "lower-upper" String — for example, "5-10" — or a simple upper limit String — for example, "10", in which case the lower limit will be 1.
Note that the underlying container may or may not support all features. For instance, it may not be able to scale, in which case only the upper limit is used.