@Target(value={TYPE,METHOD,ANNOTATION_TYPE}) @Retention(value=RUNTIME) @MessageMapping @Documented @Repeatable(value=KafkaListeners.class) public @interface KafkaListener
containerFactory()
identifies the
KafkaListenerContainerFactory
to use to build the Kafka listener container. If not
set, a default container factory is assumed to be available with a bean name
of kafkaListenerContainerFactory
unless an explicit default has been provided
through configuration.
Processing of @KafkaListener
annotations is performed by registering a
KafkaListenerAnnotationBeanPostProcessor
. This can be done manually or, more
conveniently, through EnableKafka
annotation.
Annotated methods are allowed to have flexible signatures similar to what
MessageMapping
provides, that is
ConsumerRecord
to access to the raw Kafka
messageAcknowledgment
to manually ack@Payload
-annotated
method arguments including the support of validation@Header
-annotated
method arguments to extract a specific header value, defined by
KafkaHeaders
@Headers
-annotated
argument that must also be assignable to Map
for getting access to
all headers.MessageHeaders
arguments for
getting access to all headers.MessageHeaderAccessor
for convenient access to all method arguments.When defined at the method level, a listener container is created for each method.
The MessageListener
is a
MessagingMessageListenerAdapter
,
configured with a MethodKafkaListenerEndpoint
.
When defined at the class level, a single message listener container is used to
service all methods annotated with @KafkaHandler
. Method signatures of such
annotated methods must not cause any ambiguity such that a single method can be
resolved for a particular inbound message. The
MessagingMessageListenerAdapter
is
configured with a
MultiMethodKafkaListenerEndpoint
.
EnableKafka
,
KafkaListenerAnnotationBeanPostProcessor
,
KafkaListeners
Modifier and Type | Optional Element and Description |
---|---|
java.lang.String |
autoStartup
Set to true or false, to override the default setting in the container factory.
|
java.lang.String |
beanRef
A pseudo bean name used in SpEL expressions within this annotation to reference
the current bean within which this listener is defined.
|
java.lang.String |
clientIdPrefix
When provided, overrides the client id property in the consumer factory
configuration.
|
java.lang.String |
concurrency
Override the container factory's
concurrency setting for this listener. |
java.lang.String |
containerFactory
The bean name of the
KafkaListenerContainerFactory
to use to create the message listener container responsible to serve this endpoint. |
java.lang.String |
containerGroup
If provided, the listener container for this listener will be added to a bean
with this value as its name, of type
Collection<MessageListenerContainer> . |
java.lang.String |
errorHandler
Set an
KafkaListenerErrorHandler bean
name to invoke if the listener method throws an exception. |
java.lang.String |
groupId
Override the
group.id property for the consumer factory with this value
for this listener only. |
java.lang.String |
id
The unique identifier of the container managing for this endpoint.
|
boolean |
idIsGroup
|
java.lang.String[] |
properties
Kafka consumer properties; they will supersede any properties with the same name
defined in the consumer factory (if the consumer factory supports property overrides).
|
boolean |
splitIterables
When false and the return type is a
Iterable return the result as the value
of a single reply record instead of individual records for each element. |
TopicPartition[] |
topicPartitions
The topicPartitions for this listener when using manual topic/partition
assignment.
|
java.lang.String |
topicPattern
The topic pattern for this listener.
|
java.lang.String[] |
topics
The topics for this listener.
|
public abstract java.lang.String id
If none is specified an auto-generated one is provided.
Note: When provided, this value will override the group id property
in the consumer factory configuration, unless idIsGroup()
is set to false.
SpEL #{...}
and property place holders ${...}
are supported.
id
for the container managing for this endpoint.KafkaListenerEndpointRegistry.getListenerContainer(String)
public abstract java.lang.String containerFactory
KafkaListenerContainerFactory
to use to create the message listener container responsible to serve this endpoint.
If not specified, the default container factory is used, if any.
public abstract java.lang.String[] topics
Mutually exclusive with topicPattern()
and topicPartitions()
.
public abstract java.lang.String topicPattern
Mutually exclusive with topics()
and topicPartitions()
.
CommonClientConfigs.METADATA_MAX_AGE_CONFIG
public abstract TopicPartition[] topicPartitions
Mutually exclusive with topicPattern()
and topics()
.
public abstract java.lang.String containerGroup
Collection<MessageListenerContainer>
.
This allows, for example, iteration over the collection to start/stop a subset
of containers.
SpEL #{...}
and property place holders ${...}
are supported.
public abstract java.lang.String errorHandler
KafkaListenerErrorHandler
bean
name to invoke if the listener method throws an exception.public abstract java.lang.String groupId
group.id
property for the consumer factory with this value
for this listener only.
SpEL #{...}
and property place holders ${...}
are supported.
public abstract java.lang.String clientIdPrefix
SpEL #{...}
and property place holders ${...}
are supported.
public abstract java.lang.String beanRef
Example: topics = "#{__listener.topicList}"
.
public abstract java.lang.String concurrency
concurrency
setting for this listener. May
be a property placeholder or SpEL expression that evaluates to a Number
, in
which case Number.intValue()
is used to obtain the value.
SpEL #{...}
and property place holders ${...}
are supported.
public abstract java.lang.String autoStartup
Boolean
or
a String
, in which case the Boolean.parseBoolean(String)
is used to
obtain the value.
SpEL #{...}
and property place holders ${...}
are supported.
public abstract java.lang.String[] properties
The supported syntax for key-value pairs is the same as the syntax defined for entries in a Java properties file:
key=value
key:value
key value
group.id
and client.id
are ignored.ConsumerConfig
,
groupId()
,
clientIdPrefix()
public abstract boolean splitIterables
Iterable
return the result as the value
of a single reply record instead of individual records for each element. Default
true. Ignored if the reply is of type Iterable<Message<?>>
.